PHP / JAVASCRIPT / Mysql:防止 javascript 注入

PHP / JAVASCRIPT / Mysql: Preventing javascript injections

这可能是 this question here 的重复,但它并没有真正以我(愚蠢的头脑)可以理解的方式解决和回答我的问题。
好的,我有一个网页公式,如我的 previous question. Before using $txtpost for mysql query injection, I now added $ txtpost = htmlentities($txtpost, ENT_QUOTES);, which should protect me from XSS-attacks. But, as a user points out on php.net 所示,不会保护我免受 javascript 注入。也就是说,我怎样才能防止这种 javascript 注入?正如您在上一个问题的代码中看到的那样,我不知道究竟要在文本字段中输入什么,所以我不能只允许特定的值。请注意,上一个问题中的所有错误代码现在都已修复,目前一切正常。
维克工作室

嗯,的确,您无法避免有人将 HTML 放入您的数据库。

首先

$txtpost = htmlentities($txtpost, ENT_QUOTES);

将转义引号,从而降低 SQL 注入的可能性。但是我还是可以做到OR 1 = 1。这使每个陈述都为真。现代技术依赖于准备好的语句 ()

如果您阅读以上内容,您将看到准备好的语句的 PDO 示例。您也可以使用 MySQLi 来完成此操作。它阻止了人们可以进行 SQL 注射的事实。

第二: 是的,我仍然可以放

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

进入你的数据库。您应该使用完整性函数将您喜欢的元素定义到数据库中。 PHP给你几个

  • filter_input:允许您过滤和清理某些输入。
  • strip_tags:允许您去除所有标签and/or使用您确实希望允许的标签白名单。
  • htmlspecialchars:将所有特殊字符转换为实体。喜欢“到”。

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