PHP / JAVASCRIPT / Mysql:防止javascript注入

时间:2017-07-09 09:36:39

标签: javascript php mysql security code-injection

这可能是this question here的可能副本,但它并没有真实地以我(愚蠢的头)可以理解的方式来回答和回答我的问题。
好的,我有previous question中看到的网页公式。在使用$ txtpost进行mysql查询注入之前,我现在添加了$ txtpost = htmlentities($txtpost, ENT_QUOTES);,这可以保护我免受XSS攻击。但是,当用户指出php.net时,不会保护我免受javascript注入。那说,我怎么能阻止这样的javascript注入?正如您在上一个问题的代码中所看到的,我不知道究竟将在文本字段中输入什么,因此我不能只允许特定的值。请注意,上一个问题的所有代码都是错误的,现在已修复,此刻一切正常 VicStudio

1 个答案:

答案 0 :(得分:2)

嗯,确实您不会受到保护,不会有人将HTML放入您的数据库。

首先

$txtpost = htmlentities($txtpost, ENT_QUOTES);

将转义引号,使SQL注入不太可能。但我仍然可以做OR 1 = 1。这使得每个陈述都成立。现代技术依赖于准备好的陈述(How to replace MySQL functions with PDO?

如果您阅读上述内容,您将看到准备好的声明的PDO示例。您也可以使用MySQLi执行此操作。它阻止了人们可以进行SQL注入的事实。

第二: 是的,我仍然可以使用

之类的东西
<a href="javascript:alert(1)">XSS</a>

进入您的数据库。您应该使用健全性功能将您喜欢的元素定义到数据库中。 PHP为您提供了几个

  • filter_input:允许您过滤和清理某些输入。
  • strip_tags:允许您删除所有标记和/或使用您想要允许的标记的白名单。
  • htmlspecialchars:将所有特殊字符转换为实体。喜欢“to&amp; quot。

结论是你需要掌控。您可以决定页面上的内容。因此,如果您想要安全,可以过滤所有内容并将其作为纯文本放在页面上。为安全起见,我建议消毒三次。在发布内容之前,将其传递到数据库之前,以及将其放到页面上时。这样可以最大限度地减少注射的危险。

相关问题