我希望你今天没事。
我有个问题找不到确切答案。大部分的资源使我相信这个问题是没有意义的,我不需要担心,但我不确定,不幸的是。
我有一个简单的网站,没有什么太复杂。在该站点上有一个表单,用户可以在其中提交使用简单php函数保存到mysql数据库的数据。数据通过post提交,经过净化,然后发送到localhost数据库,使用mysqli()和prepared语句插入到表中。
现在说正题。现在一切正常,但是数据可能是私有的,所以我想使用ssl证书(托管提供商也出售证书,所以安装本身就是一键操作)
问:我是否需要修改我的ssl兼容性代码?
我从来没有这样做过,所以在我的简单的情况下,有什么事情,我应该考虑和学习?
我知道inserting函数本身可能不需要任何修改,因为它连接到与后端位于同一主机上的数据库,但是表单post毕竟来自外部用户,所以我应该担心吗?
还有一个更广泛的问题:对于像我这样的简单网站(如图所示,只是一些常规的html、css、php,一些用于前端样式设计和google analytics和tag manager的vanilla 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;
}
}
1条答案
按热度按时间yduiuuwa1#
安装ssl证书后,您的网站必须使用带有https的url来处理数据。我建议表单方法应该是post,因为提议使用ssl,因为
enctype="multipart/form-data"
当页面已经使用https加载时,属性不会有太大区别。当从浏览器(客户端)用https从一个打开的页面发送数据到一个url(包含在action属性中)时,就像你做的那样,浏览器将把加密的信息发送到宿主服务器。反过来,php将接收这些干净的数据进行操作。就服务器级数据安全而言,我认为审查url参数化就足够了,可以将其包含在htaccess文件中,就像使用www和非www的url一样,两个https url都必须工作,包括返回404代码(如果找不到)或301(重定向)请参阅中的更多信息https://www.htaccessredirect.net/index.php