【问题标题】: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 给你几个

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

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

【讨论】:

    猜你喜欢
    • 2014-08-20
    • 2011-04-12
    • 1970-01-01
    • 2019-12-15
    • 2017-05-19
    • 1970-01-01
    • 2014-01-18
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多