【问题标题】:addslashes() example with NULL byte?带有 NULL 字节的 addlashes() 示例?
【发布时间】:2012-03-31 11:55:09
【问题描述】:

什么是 NUL 或 NULL 字节以及转义如何处理 NULL 字节?

有人可以举个例子吗?

单引号和双引号很明显,但我不清楚NULL字节。

来自 PHP.net 的文档。

addslashes() 在需要在数据库查询等中引用的字符之前返回一个带有反斜杠的字符串。这些字符是单引号 (')、双引号 (")、反斜杠 () 和 NUL(NULL 字节)。

我尝试过这样的事情:

$a = NULL;
$str = " NULL example $a ";
echo addslashes($str);

但我没有在输出中看到任何添加的斜线。

【问题讨论】:

  • 永远不要使用addslashes 转义数据库查询。
  • 是的,没关系,我使用 PDO 特定的准备语句..
  • @Praveen:想知道您花了几分钟来写这个问题,而不是花几秒钟在谷歌搜索(是的,它提供了很多relevant informationrelevant information第一页)
  • Null byte injection 在 HTTP 请求中发送空字符(十六进制或 ascii 字符零)时发生,用于修改从用户输入获取的磁盘读取或文件包含的文件路径。 addslashes 对此进行转义。
  • 我不认为这是一个坏问题,他只是将 NULL 值与 NUL 字节混淆了。

标签: php


【解决方案1】:

NULL 包含在这样的字符串中:

$string = "This is a NULL character: \x00";

【讨论】:

    【解决方案2】:

    addslashes 没有任何有用的功能,是对过去糟糕日子的回归。你永远不应该永远永远永远不要将它用于任何事情。曾经。如果您需要转义输入以存储在数据库中,请使用正确的转义函数(PDO 转义、mysql_real_escape_string、pg_escape_string 等)

    【讨论】:

    • 这个函数也没有什么坏处,如果它被用来在最广泛使用的编码中转义mysql字符串。
    • 大错特错,我什至不知道从哪里开始。如果您依赖它来确保安全,它可能是最有害的功能。这就是 PHP 5.4 中移除魔术引号的原因
    • 魔术引号与加斜线无关。你最好从一些事情开始,所以,我有机会启发你:)
    • 魔术引号只是自动添加斜杠。在使数据安全地注入 SQL 查询时,这两种方法都不起作用。
    • 所以,这是你反对的魔术引号,而不是加斜杠。好的,那么-1,因为魔术引号在这个问题中是题外话。
    猜你喜欢
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多