【问题标题】:Illegal characters in POST parametersPOST 参数中的非法字符
【发布时间】:2017-03-05 00:26:40
【问题描述】:

POST方法发送的值中是否有非法字符?

我知道 GET 参数中有很多字符是非法的,例如&、=,因为它们被用作分隔符等。 POST方法发送的参数是否相同,例如通过以下形式?

<form action="index.php" method="POST">
<input type="text" name="parameter1">
<input type="submit">
</form>

【问题讨论】:

  • 没有。您的表单没有问题,它应该适用于 POST 和 GET。 GET 有它的局限性,因为数据是在 URL 中传递的,你可以通过正确的 url 编码来对抗它。 POST 不在 URL 中发送,因此不受相同限制的限制。您是因为问题才问的吗?
  • 感谢您的回答。我想知道在邮寄表格中使用某些字符是否会引发某种错误。
  • 不,在纯 POST 中没有可以触发任何错误的字符。如果发生错误,那是因为接收端处理不当,这取决于您对数据的处理方式。
  • 好的,谢谢,我再也不担心非法字符了。
  • 请放心 - 并非每个帖子都是为您处理的。我正在使用用户可以将消息发布到数据库的系统。一些用户可能希望包含与号、等号或逗号。在这些情况下,我不得不使用一个内置的 Android 函数,该函数将使字符串“安全”用于发布类似于 Silinator 的代码。

标签: php html http-post


【解决方案1】:

你可以使用这个功能:

   function normtext($input,$db_link){
        $input = mysqli_real_escape_string($db_link,$input); //optional

        $illegal = array(
            '&' => '&amp;',
            '=' => '&equals;',
            '<' => '&lt;',
            '>' => '&gt;',
            "'" => '&#096;'
            //...and many more

        );
        $output = str_replace(array_keys($illegal),
            array_values($illegal), $input);

        return $output;
   }

【讨论】:

  • 好的,我可以用,但有必要吗? POST方法发送的表单中使用的字符“&”不会触发错误。
  • 哦。我认为你是对的。好的,然后在 [-and-] 中执行并在设备中接收时执行
  • 这完全没用。当您甚至不知道它将用于什么时,为什么要手动转义这样的帖子数据? (并且 mysqli_real_escape_string() 在这种情况下会失败,因为您 1. 需要一个活动的数据库连接并且 $db_link 将是未定义的)。您根据使用情况转义数据(您将使用它做什么)。对于 DB,您应该使用 Prepared Statements,这样就无需转义数据。
  • @Silinator - 如果数据将用于任何数据库操作,他应该使用 PDO(因为我们甚至不知道将使用什么引擎)和 Prepared Statements,即 到目前为止对 SQL 注入的最佳保护,not mysqli_real_escape_string(它只适用于 MySQL 和 MariaDB,并且应该只用于 strings,而不是所有数据整数等类型)。
  • @Silinator 经验法则,在您需要之前不要转义数据,然后以适合目的的方式转义它。没有适用于所有事情的“一般”转义。您很可能只会弄乱数据。顺便说一句,您不应该手动解析 HTML。请改用 htmlspecialchars()htmlentities() 等内置函数。为这些事情滚动你自己的转义函数很可能会以灾难告终......
【解决方案2】:

网络安全的第一条规则:“不信任用户”

get 和 post 用户都可以在其中放入任何内容,并且您必须过滤用户所做的任何输入,在您的表单示例中,textfiled 中的值通过 post 方法发送到服务器,这并不比 get 方法更安全它们之间的区别在于文本文件的值在 url 中不可见。

记住:您必须在 post & get 中过滤所有用户输入。

【讨论】:

  • 这根本没有回答他们的问题。我知道他们的问题是什么,因为我也有;)
猜你喜欢
  • 1970-01-01
  • 2016-04-25
  • 2017-09-07
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多