gpt4 book ai didi

php - 在服务器上安装 SSL 证书时,是否需要更改 PHP 表单提交和 MySQL 内部代码?

转载 作者:行者123 更新时间:2023-11-29 07:27:56 28 4
gpt4 key购买 nike

希望你今天一切都好。

我有一个问题,我找不到明确的答案。大多数资源让我相信这个问题没有实际意义,我不需要担心,但不幸的是我不确定。

我有一个简单的网站,没有什么太复杂的。在该站点上有一个表单,用户可以使用简单的 PHP 函数提交保存到 MySQL 数据库的数据。数据通过 POST 提交,经过清理,然后发送到本地主机数据库,以使用 mysqli() 和准备好的语句插入到表中。

进入正题。现在一切正常,但数据可能是私有(private)的,所以我想使用 SSL 证书(托管服务提供商也出售证书,所以安装本身是一键式的事情)

问题:我是否需要修改我的代码以实现 SSL 兼容性?

我以前从来没有这样做过,那么在我的简单案例中有什么我应该考虑和学习的吗?

我知道插入函数本身可能不需要任何修改,因为它连接到与后端位于同一主机上的数据库,但是 POST 表单毕竟来自外部用户,所以应该我担心那个?

还有一个更广泛的问题:对于像我这样的简单网站(如图所示,只是一些常规的 HTML、CSS、PHP,一些用于前端样式目的以及用于 Google Analytics 和标签管理器的普通 JS 和 jQuery)还有什么应该我考虑在切换到 SSL 时,除了重新配置 htaccess 以强制查看者使用 HTTPS 并确保没有混合内容之外?

我读到的所有内容都让我相信,一旦托管服务提供商安装了​​证书,我应该只需键入 https://example.com 就可以了,一切都应该正常工作。

这是真的吗?

很抱歉,如果这个问题很蹩脚,但我找不到明确的答案 - 有时我不明白。感谢您提前回答。

这是我的一些代码,以防万一。

Index.php 和表单:

<?php

// Nonce (not mentioned in the question, but I didn't want to omit it for clarity)
$timestamp = time();
$form_action = 'submit_form';
$nonce = create_nonce($form_action, $timestamp);

// Pushing data
if(isset($_POST['form1'])){
if ( ! empty( $_POST ) ) {
$insert = process_data($_POST);
}
}

?>

// The Form

<form action="" method="post">

// Nonce fields, ignore
<input type="hidden" name="timestamp" value="<?php echo $timestamp; ?>">
<input type="hidden" name="form_action" value="<?php echo $form_action; ?>">
<input type="hidden" name="nonce" value="<?php echo $nonce; ?>">

// Here is the rest of the form
<input type="text" name="stuff1" required>
<input type="text" name="stuff2" required>
<input type="text" name="stuff3" required>
<input type="text" name="stuff4" required>
<input type="text" name="stuff5" required>
<button type="submit" name="form1">SEND STUFF</button>
</form>

函数本身:

// NONCE - Creating the nonce
if ( ! function_exists( 'create_nonce' ) ) {
function create_nonce($action, $time) {
$str = sprintf('%s_%s_%s', $action, $time, NONCE_SALT1);
$nonce = hash('sha512', $str);

return $nonce;
}
}

// NONCE - Verification
if ( ! function_exists( 'verify_nonce' ) ) {
function verify_nonce($nonce, $action, $time) {
$check = create_nonce($action, $time);

if ( $nonce == $check ) {
return true;
}

return false;
}
}


// Now the important bit: the function processing data from the form
if ( ! function_exists( 'process_data' ) ) {
function process_data($post) {
// Check nonce
$verify = verify_nonce($post['nonce'], $post['form_action'], $post['timestamp']);

if ( false === $verify ) {
return false;
}

// Sanitization
$args = array(
'stuff1' => 'FILTER_SANITIZE_STRING',
'stuff2' => 'FILTER_SANITIZE_STRING',
'stuff3' => 'FILTER_SANITIZE_STRING',
'stuff4' => 'FILTER_SANITIZE_STRING',
'stuff5' => 'FILTER_SANITIZE_STRING',
);

$filter_post = filter_var_array($post, $args);


// Insert into the database
$mysql = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

$stmt = $mysql->prepare("
INSERT INTO mydatatable (stuff1,stuff2,stuff3,stuff4,stuff5)
VALUES(?,?,?,?,?)
");

$stmt->bind_param("sssss",
$filter_post['stuff1'], $filter_post['stuff2'], $filter_post['stuff3'], $filter_post['stuff4'], $filter_post['stuff5']
);

$insert = $stmt->execute();

// Closing connections

$stmt->close();
$mysql->close();

return $insert;
}
}

最佳答案

安装 SSL 证书后,您的网站必须使用带有 HTTPS 的 URL 来处理数据。由于建议使用 SSL,我建议真正发布表单方法,因为当页面已经使用 HTTPS 加载时,enctype="multipart/form-data" 属性不会有太大区别.

当使用 HTTPS 从浏览器(客户端)将数据从打开的页面发送到 URL(包含在 action 属性中)时,浏览器会像您一样将加密信息发送到托管服务器。反过来,PHP 将接收这些干净的数据进行操作。就服务器级数据安全而言,我认为审查 URL 参数化就足够了,并且可以将其包含在 htaccess 文件中,如带 www 和不带 www 的 URL,都是 HTTPS URL 必须有效,包括返回 404 代码(如果未找到)或 301(重定向),请参阅 https://www.htaccessredirect.net/index.php 中的更多信息。

关于php - 在服务器上安装 SSL 证书时,是否需要更改 PHP 表单提交和 MySQL 内部代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52938533/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com