代码之家  ›  专栏  ›  技术社区  ›  codeholic

在post请求中编码最小字符:是否安全?

  •  3
  • codeholic  · 技术社区  · 15 年前

    我遇到了一种方法,只对post参数值中的以下4个字符进行编码: # ; & + . 如果有的话,它会导致什么问题?

    我个人不喜欢这种黑客。我之所以要问这个问题,是因为我和它的发明者发生了争执。

    更新。 为了澄清,这个问题是关于 编码 post主体中的参数,而不是关于在服务器端转义post参数的参数,例如,在将这些参数输入shell、数据库、html页面或其他内容之前。

    3 回复  |  直到 13 年前
        1
  •  1
  •   Ivan Nevostruev    15 年前

    rfc1738 (如果您正在使用 application/x-www-form-urlencoded 传输数据的编码):

    不安全的:

    字符可能不安全,原因有很多。空间字符是不安全的,因为当URL被转录、排版或接受字处理程序的处理时,重要的空间可能会消失,不重要的空间可能会被引入。字符“<”和“>”不安全,因为它们在自由文本中用作URL周围的分隔符;引号(“”)用于在某些系统中分隔URL。字符“”不安全,应始终对其进行编码,因为它在万维网和其他系统中用于从可能紧随其后的片段/锚标识符中分隔URL。字符“%”不安全,因为它用于编码其他字符。其他字符是不安全的,因为已知网关和其他传输代理有时会修改这些字符。这些字符是“”、“”、“”、“\”、“^”、“~”、“[”、“]”和“`”。

    所有不安全的字符必须始终在URL中编码。例如,即使在通常不处理片段或定位标识符的系统中,字符“”也必须在URL中进行编码,这样,如果将URL复制到使用它们的另一个系统中,则无需更改URL编码。

        2
  •  0
  •   outis    15 年前

    转义元字符通常(总是?)防止注射攻击。不同的系统有不同的元特征,因此每个系统都需要自己的防止注入的方法。不同的系统有不同的字符转义方式。有些系统不需要转义字符,因为它们有不同的控制和数据通道(例如准备好的语句)。此外,当数据被引入系统时,过滤通常是最好的。

    最大的问题是,仅从这四个字符中逃逸并不能提供完全的保护。在过滤了您提到的四个字符之后,SQL、HTML和shell注入攻击仍然是可能的。

        3
  •  0
  •   DCC    15 年前

    考虑一下: $sql ='DELETE * from 文章 WHERE 身份证件 ='.$_POST['id'].';
    在表格中输入: 1' OR '10
    然后变成这样: $sql='delete*从 文章 在哪里? 身份证件 ='1' OR '10';

    推荐文章