2011-08-03 43 views
0

我需要使用get函数从url中检索$ title变量。

$title=$_GET["title"]; 

$ title稍后将用于MySQL查询。

问题是如何使这个安全吗? 换句话说,如何抵消通过URL发送的任何恶意代码。

+2

可能的重复http://stackoverflow.com/search?q=sanitize+php – Gordon

+1

看看这个questin:http://stackoverflow.com/questions/4749588/protect-against-sql-injection – enricog

回答

5

(对于“secure”的值等于“以防止它打破数据库”):使用任何使用bound parameters的数据库API。

绑定参数倾向于让数据库处理转义(因此使用由数据库作者而不是语言作者编写的转义例程),并使用不太容易被遗忘的语法,然后手动转义每条输入数据(例如)mysql_real_escape_string

您可能需要在以后采取其他步骤,你在不同的上下文做对数据进行处理之前(例如,使其安全地插入到HTML文档)

0

您可以使用mysql_real_escape_string功能(转义特殊字符在SQL语句中使用的字符串)

Php Manuel

1

必须使用mysql_real_escape_string(),以逃避可能与你的数据库干扰的所有字符。如果您显示此标题,您还应该使用htmlentities()或striptags()

0

使用查询参数。有许多不同的方法可以从PHP连接到mysql,并且它们使用参数的方式因框架而异。下面是使用PDO为例:

$dbh = new PDO('mysql:dbname=test;host=127.0.0.1', 'username', 'password'); 
$sth = $dbh->prepare("select * from table where title = :title") 
$sth->execute(array(':title' => $_GET["title"])); 
$rows = $sth->fetchAll(); 

var_dump($rows); 
1

由于PHP 5.2,你可以使用filter_input()和filter_input_array()来消毒和验证的$ _GET或$ _POST数据。

例如:

$my_string = filter_input(INPUT_GET, 'my_string', FILTER_SANITIZE_STRING); 

了解更多关于本文here英寸

对于SQL查询,建议您使用PDO和预准备语句来防止SQL注入。您可以在PHP手册here中阅读关于PDO的内容。