-2

可能重复:
终极清洁/安全功能

我正在寻找一些解决方案,以确保我的 $_GET 传入数据仅具有所需的内容,而不具有其他一些危险字符等。如何进行此操作的最佳验证/清理?我假设 REGEXP 可以在这里发挥一些作用:

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

//call controller... or whatever.
}
4

3 回答 3

4

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

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

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


如果要显示数据,则需要转义 HTML 实体。您可以使用htmlentities函数执行此操作。


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


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

于 2012-05-05T17:01:50.543 回答
0

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

在 PHP 中,这将是:

<?php
echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?>
于 2012-05-05T16:57:39.170 回答
0

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

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

于 2012-05-05T17:16:41.533 回答