安全地处理PHP和mySQL中的用户输入

时间:2012-10-31 14:55:51

标签: php mysql security xss code-injection

  

可能重复:
  What’s the best method for sanitizing user input with PHP?

我知道这里曾多次询问过类似的问题,而且我花了一些时间阅读所有这些问题,但我仍然不确定我的申请是否安全......

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

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

  1. 用户将其数据输入HTML表单,然后将其转换为$ _POST数据。
  2. posthandler.php文件将所有$ _POST数据转换为$ _SESSION数据
  3. $ _SESSION数据转换为$ this->类变量
  4. $ this->类变量在mySQL查询中使用并输入到数据库
  5. 中 来自数据库的
  6. 数据以HTML格式显示。
  7. 为了确保网站的安全,我必须采取哪些措施来采取哪些措施? (防止代码注入和XSS)

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

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

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

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

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

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

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

    如果我在步骤2中犯了错误,或者我无法找到字段的正则表达式,该怎么办?我只是将$ _POST转换为$ _SESSION而无需进一步验证。它会在查询过程中保存我的屁股以使用mysqli_real_escape_string()并在浏览器中显示之前过滤所有字符吗?

    我期待您的见解!

0 个答案:

没有答案