$ _GET php安全
问题描述:
这样编码会带来安全风险吗?
$test = $_GET['test'];
if($test) {
$sql = mysql_query("SELECT * FROM tbl WHERE col2 = 'ABC'");
$row ...
}
答
没有,你只使用$_GET
评估如果变量是真还是假。
如果你想在你的查询中使用它,而不是在你的查询中使用它,或者甚至只是为用户回应它,它会。
答
不是nescesairily。但你提供的太少,以确定。一般来说,将数据从$ _GET或$ _POST插入到sql(SQL注入)时会出现问题。当人们开始将SQL代码放入$ _GET或$ _POST时,这会产生错误,但现在情况并非如此。
对于进一步阅读,很少有冗长的体积,让你快速了解XSS和安全:
答
只要你不如果$test
是真或假(因此如果代码运行或不运行),那么不介意,那么测试就没有安全风险 价值。
答
只有当您测试的$ _GET变量为用户提供某种来自数据库的秘密信息时。但正如其他人所说的那样,你不打开SQL注入。
但是没有更多的信息,对脚本的安全性发表评论有点困难。由于安全性涵盖了一个大的领域,我们只能对您给我们的代码发表评论。
答
$ _GET [“”]已根据您的版本进行转义,如果您需要在mysql查询中使用它,请参阅[5.3 deprecrated] http://www.php.net/manual/en/function.set-magic-quotes-runtime.php以了解有关引号如何转义的更多信息。
也取决于你的error_reporting功能,你可能想要做一个
if(
isset($_GET['test']) &&
$_GET['test']!=''
){
$test=$_GET['test'];
#...
}
答
$test = $_GET['test']; if($test) { $sql = mysql_query("SELECT * FROM tbl WHERE col2 = 'ABC'"); $row ... }
如果你的$ _GET是,如果你的$ _GET号码相同ID可以使用
if(!is_numeric($test)){"echo "not numeric " ; } else { your code }
可以使用的字符串
function security ($test) { $test = str_replace ("""" , "" ,$test); $test = str_replace ("<" , "" ,$test); $test = str_replace (">" , "" ,$test); $test = str_replace ("//" , "" ,$test); $test = str_replace ("\" , "" ,$test); $test = str_replace ("''" , "" ,$test); $test = str_replace ("%" , "" ,$test); $test = str_replace ("^" , "" ,$test); $test = str_replace ("or" , "" ,$test); $test = str_replace ("&" , "" ,$test); $test = str_replace ("and" , "",$test);
return $test ; }
$test = security($test);
$sql = mysql_query("SELECT * FROM tbl WHERE col2 = 'ABC'");
$numrow = mysql_num_rows($sql);
if($numrow==0) { echo "error post" ; }
else { your code }
可能重复[Better $ _GET安全性](http://*.com/questions/5271520/better-get-security) – 2011-06-07 09:40:27
为了更好地理解你可以使用这个[guide](http://php.robm .me.uk /) – 2011-06-07 09:59:21