PHP帮助保持$ _GET安全

时间:2013-06-19 16:06:49

标签: php security get

我无法真正理解清除GET请求的所有不同方法,所以我想我会请求帮助。

$view=$_GET['view'];

if($view){
$result = mysql_query('SELECT * FROM main WHERE category = "'.$view.'"', $main);
}

这里有安全问题吗?我试图搜索示例尝试注入字符串,但我找不到任何有用的东西。

我在考虑使用只有字母和数字的preg_match,但不确定是否需要它。

尽管我想知道答案,是否有任何背景阅读,我应该看看帮助我?有很多不同的场景和方法来清理那些不同情况的字符串,我正在努力解决这些问题。

3 个答案:

答案 0 :(得分:1)

试试这个:

  

?view = derp“OR SLEEP(10000000)=”问题?

对此和您的网站的足够请求是DoS。

避免它的最佳方法是使用mysql_real_escape_string,或更新为更新的内容,例如PDO。

答案 1 :(得分:1)

  

这里有安全问题吗?

是的,您有SQL Injection个漏洞。

为了保护您的查询,您应该考虑使用PDO或MySQLi并使用预准备语句。准备好的语句提供了比转义或验证变量更多的安全性。准备好的语句永远不会在查询中插入变量,而是由MySQL服务器单独处理变量(或参数),因此不会留下SQL注入的可能性。

This is a good PDO tutorial针对来自mysql_*背景的开发人员,它包含一些预备语句示例。

适用于您的查询的SQL注入示例:

  

script.php?view =''OR 1

这会欺骗您的代码从表中检索所有行,因为它会导致WHERE子句始终求值为true。这就是查询的结果:

  

SELECT * FROM main WHERE category =''OR 1

答案 2 :(得分:0)

您应该切换到使用mysqli或PDO使用预准备语句。这将解决安全问题。另外,不推荐使用mysql_函数,这些函数将被删除。