如何安全地使用$ _GET?

时间:2011-08-03 11:21:38

标签: php mysql security

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

$title=$_GET["title"];

$ title后来用于MySQL查询。

问题是如何确保安全? 换句话说,如何中和通过URL发送的任何恶意代码。

5 个答案:

答案 0 :(得分:5)

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

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

在对不同上下文中的数据执行某些操作之前,您可能需要稍后执行其他步骤(例如,为了安全地插入HTML文档)

答案 1 :(得分:1)

您必须使用mysql_real_escape_string()来转义可能干扰您数据库的所有字符。如果您要显示此标题,您还应该使用htmlentities()或striptags()

答案 2 :(得分: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的内容。

答案 3 :(得分:0)

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

Php Manuel

答案 4 :(得分: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);