我遇到了一种方法,可以在POST参数的值中仅编码以下4个字符:# ; & +。如果有问题的话,会引起什么问题呢?
就我个人而言,我不喜欢这样的黑客。我问这个问题的原因是我和它的发明者有争论。
更新.澄清,这个问题是关于在POST体中编码参数,而不是关于在服务器端转义POST参数,例如,在将它们输入到shell、数据库、HTML页面或其他任何东西之前。
发布于 2010-02-26 22:47:14
从rfc1738 (如果使用application/x-www-form-urlencoded编码传输数据):
不安全:字符可能是不安全的,原因有很多。空间字符是不安全的,因为重要的空格可能会消失,当URL被转录或排版或接受文字处理程序处理时,可能会引入不重要的空间。字符"<“和">”是不安全的,因为它们被用作自由文本中URL周围的分隔符;在某些系统中,引号(“”)用于分隔URL。字符"#“是不安全的,应该始终对其进行编码,因为它在万维网和其他系统中用于分隔可能后面的片段/锚标识符的URL。字符"%“不安全,因为它用于对其他字符进行编码。其他字符是不安全的,因为网关和其他传输代理有时会修改这些字符。这些字符是"{“、"}”、“x”、"\“、"^”、"~“、"”、"“和"`”。所有不安全字符必须始终在URL中编码。例如,字符"#“必须在URL中编码,即使在通常不处理片段或锚标识符的系统中也是如此,因此,如果URL被复制到使用它们的另一个系统中,则无需更改URL编码。
发布于 2010-02-26 21:14:51
转义元字符通常是(总是?)是为了防止注射攻击。不同的系统有不同的元字符,因此每个系统都需要有自己的预防注射的方法。不同的系统有不同的转义方式。有些系统不需要转义字符,因为它们有不同的控制和数据通道(例如准备好的语句)。另外,当数据被引入到系统中时,过滤通常是最好的。
最大的问题是,只转义这四个字符并不能提供完全的保护。在过滤您提到的四个字符之后,SQL、HTML和shell注入攻击仍然是可能的。
发布于 2010-02-26 21:21:45
考虑一下:$sql ='DELETE * fromarticlesWHEREid='.$_POST['id'].';
然后输入表单:1' OR '10
然后变成这样:$sql ='DELETE * fromarticlesWHEREid='1' OR '10';
https://stackoverflow.com/questions/2344843
复制相似问题