2012-05-05 14 views
-2

可能重复:
The ultimate clean/secure functionURL中应允许使用哪些字符以及如何确保/清除不需要的字符?

我找了一些解决方案,以确保我的$ _GET传入数据只有需要什么,而不是其他一些危险人物等会如何做这个最好的验证/消毒?我认为REGEXP,在这里可以发挥一些作用:

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

//call controller... or whatever. 
} 
+5

没有“危险字符”这样的东西,只有危险的代码。 –

+0

你需要一个验证脚本? –

+1

对此没有人回答。它完全取决于你使用'$ _GET ['p']'。 – Paulpro

回答

0

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

在PHP中,这将是:

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

验证或净化你的输入,使用PHP的filter功能:

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

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


如果你要显示的数据,你需要逃跑的HTML实体。您可以使用htmlentities函数执行此操作。


您打算将数据存储在数据库中吗?根据您连接到数据库(MySQL的函数库MySQLi或PDO),你需要(分别)使用mysql_real_escape_stringmysqli::real_escape_string or mysqli_real_escape_string,或PDO::quoteprepared statements的方式。


是否要使用URL中的值?那么你需要使用urlencode函数。

0

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

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

相关问题