- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
希望你今天一切都好。
我有一个问题,我找不到明确的答案。大多数资源让我相信这个问题没有实际意义,我不需要担心,但不幸的是我不确定。
我有一个简单的网站,没有什么太复杂的。在该站点上有一个表单,用户可以使用简单的 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/
我听说最好不要从您系统的 Perl 版本所在的 CPAN 安装模块。我知道如何使用命令行安装模块,我只是想知道是否有办法将 CPAN 与系统核心 Perl 分开。 我应该: 下载源代码并专门为这些模块
我听说最好不要从系统的 Perl 版本所在的 CPAN 安装模块。我知道如何使用命令行安装模块,我只是想知道是否有办法将 CPAN 与系统的核心 Perl 分开。 我应该: 下载源代码并专门为这些模块
单独安装 electron 与通过 electron-builder 安装有什么区别?我正在使用 React 构建一个 Electron 应用程序,并且已经找到了一些教程。它们安装 Electron
两者安装有什么区别?我按照安装页面上的说明在全局范围内安装了 webpack,然后我转到了入门指南,据说在那里可以在本地安装 webpack-cli。 CLI = Command Line Inter
我在 OS X Yosemite 上用 PHP 安装了默认的 Apache 服务器,安装了 pear,用 brew 安装了 Solr (brew install solr),现在我正在尝试使用 PEC
我解压并编译了 Ruby 2.1 并安装了几个支持工具。 但是当我安装了 libssl-dev 时,OpenSSL 不会安装。 我在支持 openssl 时遇到这个错误: make: *** No r
我在 android studio 2.3.1 和 gradle 3.2 中设计了 2 到 3 个应用程序。当我从它运行应用程序到任何设备或模拟器时,一切都工作正常。但是当我从构建文件夹中获取该 ap
我注意到我正在读一本书提到通过 apt-get 安装 numpy 和 opencv apt-get install python-numpy python-opencv 但我可以通过以下方式在 pip
我正在尝试在 Windows 8.1 上安装 ansicon。我提取了文件并达到了我需要调用 ansicon -i 的级别。当我在 cmd 中输入此内容并运行 python 脚本时效果很好,但是当我通
我有 linux MINT 17.3 Kernel 4.4.0-81 所有更新可用。 (由于不同的原因,我无法迁移到更新版本的 ubuntu/mint) 我已经通过 PPA 安装了 FFMPEG(不是
尝试在本地运行我的应用程序时出现错误: 我只在 chrome 浏览器中收到此错误。我尝试过不同的东西,但我不确定为什么它是 Chrome 特定的。 最佳答案 我怀疑这不是 Firebase 问题,而是
这是我第一次开发 AngularJS 应用程序并使用脚手架工具 Yeoman ( http://yeoman.io/ )。我想对我的一些图标使用 fontawesome ( http://fortaw
我知道您通常“应该”$ pip install 如果包没有 brew ,但如果有一个你想安装的 python 包,你可以使用 $ pip install或 $ brew install为了?例如,通过
我正在尝试通过 RVM 安装 Ruby 1.9.3。然而,当谈到安装 RubyGems 时,我得到了这个: curl: (22) The requested URL returned error: 4
我是真正提出问题的新手,但你去吧。 我一直在尝试按照安装指南添加 dnsname: https://github.com/containers/dnsname https://github.com/c
Studio更新至0.4.0 建筑产量为“需要1.8版Gradle”;将设置设置为1.8 bin目录; 建立 “要求1.9级”;将设置设置为1.9 bin; 建立 “要求1.8级” 啊。不知道该怎么做
我刚刚注意到 kernel.org 因维护而停机。是否有使用不同镜子的不同公式?或者我可以向 Homebrew 软件添加不同的来源(如 bundler ?)? 谢谢你的帮助! 最佳答案 快速解决方法:
当我运行时: peardev install phpunit/PHPUnit 我得到以下信息: No releases available for package "pear.phpunit.de/P
服务器操作系统为Fedora 24. 64bit。 我想安装 Git 2.6.6。 所以下载源码并安装。 此服务器离线。所以我不使用“yum”。 ./configure --prefix=/usr/l
我正在尝试在我自己的服务器(操作系统:Linux Ubuntu Server 12.04)上安装 OpenEdX,但我遇到了同样的错误。谁能帮帮我? TASK: [ insights | insta
我是一名优秀的程序员,十分优秀!