$ _GET php安全

问题描述:

这样编码会带来安全风险吗?

$test = $_GET['test']; 
if($test) { 
$sql = mysql_query("SELECT * FROM tbl WHERE col2 = 'ABC'"); 
$row ... 
} 
+0

可能重复[Better $ _GET安全性](http://*.com/questions/5271520/better-get-security) – 2011-06-07 09:40:27

+0

为了更好地理解你可以使用这个[guide](http://php.robm .me.uk /) – 2011-06-07 09:59:21

不,上面的代码没有任何安全漏洞,因为您没有在任何mysql查询中使用GET变量。

here为其它安全问题

+0

好的,谢谢,如果用户输入类似'?test = exec(....)'的东西,会不会发生任何事情? – phpnewbie 2011-06-07 09:44:36

+0

@phpnewbie:在这种情况下,如果您没有使用[eval](http://php.net/manual/en/function.eval.php)并且没有将用户输入(GET var)传递到'eval'中,那么您安全 – 2011-06-07 09:52:44

没有,你只使用$_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 }