我需要使用get函数从url中检索$ title变量。
$title=$_GET["title"];
$ title后来用于MySQL查询。
问题是如何确保安全? 换句话说,如何中和通过URL发送的任何恶意代码。
答案 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语句中使用)
答案 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);