可能重复:
The ultimate clean/secure functionURL中应允许使用哪些字符以及如何确保/清除不需要的字符?
我找了一些解决方案,以确保我的$ _GET传入数据只有需要什么,而不是其他一些危险人物等会如何做这个最好的验证/消毒?我认为REGEXP,在这里可以发挥一些作用:
if (isset($_GET['p'])) {
//validate //sanitize etc...
//call controller... or whatever.
}
可能重复:
The ultimate clean/secure functionURL中应允许使用哪些字符以及如何确保/清除不需要的字符?
我找了一些解决方案,以确保我的$ _GET传入数据只有需要什么,而不是其他一些危险人物等会如何做这个最好的验证/消毒?我认为REGEXP,在这里可以发挥一些作用:
if (isset($_GET['p'])) {
//validate //sanitize etc...
//call controller... or whatever.
}
如果我理解你的问题正确,您可以使用百分号编码。更多信息here。
在PHP中,这将是:
<?php
echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?>
验证或净化你的输入,使用PHP的filter功能:
验证用于验证或检查,如果数据符合某些 资格。例如,传入
FILTER_VALIDATE_EMAIL
将确定 是否是有效的电子邮件地址,但不会更改数据本身的 。消毒将清理数据,因此它可能会通过删除 不需要的字符来更改它。例如,传入
FILTER_SANITIZE_EMAIL
将删除不适合电子邮件地址的字符为 包含。也就是说,它不验证数据。
如果你要显示的数据,你需要逃跑的HTML实体。您可以使用htmlentities函数执行此操作。
您打算将数据存储在数据库中吗?根据您连接到数据库(MySQL的函数库MySQLi或PDO),你需要(分别)使用mysql_real_escape_string,mysqli::real_escape_string or mysqli_real_escape_string,或PDO::quote或prepared statements的方式。
是否要使用URL中的值?那么你需要使用urlencode函数。
它取决于$ _GET参数的内容。使用REGEX或字符串函数删除不必要的字符。例如:如果您的变量是页码,则删除不是数字的所有内容。如果它是某种排序值,则检查可能的值(asc/desc/...)并删除其余值。只保留你需要的内容。这应该是最安全的方式。
对于其他内容,请使用urlencode()和urldecode(),这样您就可以传递每个可能的字符。但是,当您将此输入用于其他事物时(例如,保存到数据库或显示数据),请小心!请始终使用mysql_real_escape_string(),htmlentities()等类似函数来编码$ _GET参数的内容。
没有“危险字符”这样的东西,只有危险的代码。 –
你需要一个验证脚本? –
对此没有人回答。它完全取决于你使用'$ _GET ['p']'。 – Paulpro