0

可能重复:
使用 PHP 清理用户输入的最佳方法是什么?

我知道类似的问题在这里被问过多次,我花了一些时间阅读所有这些问题,但我仍然不确定我的应用程序是否安全......

我正在构建的网站允许用户将内容发布到数据库中,编辑自己的帖子,搜索其他帖子,并显示其他用户的帖子。显然,有一大堆用户输入和表单数据等等,我必须确保它们是安全的。

所以这是我的流程目前的工作方式:

  1. 用户将他们的数据输入到 HTML 表单中,这些表单将转换为 $_POST 数据。
  2. posthandler.php 文件将所有 $_POST 数据转换为 $_SESSION 数据
  3. $_SESSION 数据被转换成 $this-> 类变量
  4. $this-> 类变量在 mySQL 查询中使用并输入到数据库中
  5. 从数据库中,数据以 HTML 格式显示。

我必须采取哪些措施来确保我的网站的安全?(防止代码注入和XSS)

现在我的想法是这样的,如果我错了,请纠正我:

  • 对于 1. 我无法控制,数据完全易受攻击。

  • 因此在 2. 我必须检查数据是否与我期望的某些模式匹配(检查它是否是数字,检查它是否是一个日期,检查它是否只是字母,检查它是否是我提供的数组中的一个值,使用常规表达式,...)这样我可以防止,例如,如果我期望一个介于 1 和 10 之间的值,并且有人说“'--DROP table;” 相反,我已经确保这些字段是安全的。当然,不像用户可以输入消息的文本框那样限制性强的字段仍然容易受到攻击。

  • 对于步骤 3。如果我在之前的步骤中做的一切都正确,我应该不需要做任何事情,对吧?攻击者不应该能够更改 SESSION 数据或类变量,除非服务器端存在重大安全漏洞,我的托管服务提供商应该对此负责,对吗?

  • 在执行查询的第 4 步中,我需要使用 mysqli_real_escape_string() 转义数据,以确保数据不作为命令处理。

  • 在第 5 步中。我计划将每个特殊字符转换为它们各自的 HTML 代码片段。所有"将被转换"为例如。

我应该在每个步骤中应用任何其他安全措施/过滤器吗?

如果我在步骤 2 中犯了错误怎么办。)或者我无法找到某个字段的正则表达式。我只是从 $_POST 转换为 $_SESSION 而无需进一步验证。在查询期间使用 mysqli_real_escape_string() 并在所有字符显示在浏览器中之前过滤它们是否会节省我的精力?

我期待你的见解!

4

0 回答 0