【问题标题】:What characters should be allowed in a URL and How do I make sure / get rid of unwanted characters? [duplicate]URL 中应该允许哪些字符以及如何确保/删除不需要的字符? [复制]
【发布时间】:2012-05-05 16:50:42
【问题描述】:

可能重复:
The ultimate clean/secure function

我正在寻找一些解决方案,以确保我的 $_GET 传入数据仅包含所需的内容,而不包含其他一些危险字符等。这样做的最佳验证/清理方法是什么?我认为 REGEXP 可以在这里发挥一些作用:

if (isset($_GET['p'])) {
 //validate //sanitize etc...

//call controller... or whatever.
}

【问题讨论】:

  • 没有“危险字符”,只有危险代码。
  • 您需要验证脚本吗?
  • 对此没有一个答案。这完全取决于您使用 $_GET['p'] 的目的。
  • 您希望p 变量中包含什么样的数据?你用它来做什么?什么是正确的数据?

标签: php


【解决方案1】:

要验证或清理您的输入,请使用 PHP 的 filter 函数:

验证用于验证或检查数据是否满足某些 资格。例如,传入FILTER_VALIDATE_EMAIL 将 确定数据是否是有效的电子邮件地址,但不会更改 数据本身。

Sanitization 将清理数据,因此它可能会通过删除 不需要的字符。比如传入FILTER_SANITIZE_EMAIL 将删除不适合电子邮件地址的字符 包含。也就是说,它不会验证数据。


如果要显示数据,则需要对 HTML 实体进行转义。您可以使用htmlentities 函数来做到这一点。


您是否要将数据存储在数据库中?根据您连接到数据库的方式(MySQL 函数、MySQLi 或 PDO),您需要(分别)使用mysql_real_escape_stringmysqli::real_escape_string or mysqli_real_escape_stringPDO::quoteprepared statements


您想使用 URL 中的值吗?然后你需要使用urlencode函数。

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,您可以使用百分比编码。更多信息here.

    在 PHP 中是:

    <?php
    echo '<a href="mycgi?foo=', urlencode($userinput), '">';
    ?>
    

    【讨论】:

      【解决方案3】:

      这取决于 $_GET 参数的内容。使用 REGEX 或字符串函数删除不必要的字符。例如:如果您的变量是页码,则删除所有不是数字的内容。如果它是某种排序值,则检查可能的值(asc/desc/...)并删除其余值。只保留您需要的内容。这应该是最安全的方式。

      对于其他内容,请使用urlencode()urldecode(),这样您就可以传递所有可能的字符。但是当你将此输入用于其他事情时要小心(例如,保存到数据库或显示数据)!始终使用 mysql_real_escape_string()htmlentities() 和类似的函数来编码 $_GET 参数的内容。

      【讨论】:

        猜你喜欢
        • 2010-11-07
        • 1970-01-01
        • 2018-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 2021-01-13
        相关资源
        最近更新 更多