【问题标题】:$_GET['user'] security vulnerability in PHPPHP 中的 $_GET['user'] 安全漏洞
【发布时间】:2011-08-10 08:55:31
【问题描述】:

我发布它是为了在特定情况下进行澄清,尽管用户输入清理/验证是陈词滥调的主题。

一段代码包含

$haystack=$_GET['user'];

$input 永远不会用于 'echo' 或 'print' 或任何 SQL 查询或任何此类事情。用户输入 ($haystack) 的唯一进一步用途是检查字符串是否包含预定义的 $needle。

if (preg_match($needle,$haystack)) {
$result="A";
} else {
$result="B";
}

我担心的是恶意代码的执行,而不是用户输入中存在恶意代码。

所以问题是,如果用户输入仅在上述上下文中使用(在 echo、print、SQL 等中没有使用),是否仍有可能执行用户输入中的恶意代码。

我想添加上下文所需的安全措施,而不是过度使用。

【问题讨论】:

  • 我认为没有问题,但最大的问题是如果你忘记了哪个变量被清理了。或者,如果您认为它已被消毒后的其他程序员。我知道这是一种很好的工作方式(不检查就忘记但可能发生),更好地创建一个清理功能,您可以轻松地将其应用于任何输入。或将您的已清理变量放在清楚标记的变量名称中,例如 $clean_xxx

标签: php security xss


【解决方案1】:

如果仅在上下文中使用,则无法从用户输入中执行恶意代码。

你应该小心evalpreg_replace(带有修饰符e,谢谢Pelshoff)、数据库查询和echo(&printsprintf...) .

【讨论】:

    【解决方案2】:

    通过更改字符串来执行任意代码是不可能的。只有当你直接输出字符串,或者在SQL中使用它时,你才真正担心。

    【讨论】:

    • 除非模式依赖于它 :) 题外话,抱歉,但是 preg_match 中的 /e 修饰符可以执行代码。
    【解决方案3】:

    preg_match 最终不会执行您的输入。隐藏可利用的错误太简单明了。如果你在运行preg_match之后再折腾$haystack,那么它不可能伤害你。

    【讨论】:

      【解决方案4】:

      虽然$haystack 可能无法反映,但它显然会影响程序流程。您发布的(极短的)代码肯定不会直接受到攻击,但不清理您的输入可能会导致代码与其他漏洞一起执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-17
        • 2014-04-28
        • 1970-01-01
        • 2017-11-24
        相关资源
        最近更新 更多