【问题标题】:PHP / JAVASCRIPT / Mysql: Preventing javascript injectionsPHP / JAVASCRIPT / Mysql:防止 javascript 注入
【发布时间】:2017-07-09 09:36:38
【问题描述】:
这可能与this question here 重复,但它并没有以我(愚蠢的头脑)可以理解的方式真正解决和回答我的问题。
好的,我有一个网页公式,如我的previous question 所示。在使用 $txtpost 进行 mysql 查询注入之前,我现在添加了$ txtpost = htmlentities($txtpost, ENT_QUOTES);,它应该可以保护我免受 XSS 攻击。但是,正如用户在php.net 上指出的那样,不会保护我免受 javascript 注入。也就是说,我怎样才能防止这种 javascript 注入?正如您在上一个问题的代码中看到的那样,我不知道将在文本字段中输入的确切内容,因此我不能只允许特定值。请注意,上一个问题中的所有错误代码现在都已修复,目前一切正常。
维克工作室
【问题讨论】:
-
您是否要将用户提交的值直接转储到 JavaScript 中?可能不是。但如果你是,那么json_encode 会做到的。
标签:
javascript
php
mysql
security
code-injection
【解决方案1】:
嗯,确实不会有人将 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 给你几个
结论是你需要控制。您决定页面上的内容。因此,如果您想要安全,您可以过滤所有内容并将其作为纯文本放在您的页面上。为了安全,我建议消毒三遍。在内容发布之前,当它被传递到数据库时,当它再次被放到页面上时。这样可以将注射的危险降到最低。