【发布时间】:2011-08-03 11:21:38
【问题描述】:
我需要使用 get 函数从 url 中检索 $title 变量。
$title=$_GET["title"];
$title 稍后在 MySQL 查询中使用。
问题是如何确保安全? 换句话说,如何中和任何通过 URL 发送的恶意代码。
【问题讨论】:
我需要使用 get 函数从 url 中检索 $title 变量。
$title=$_GET["title"];
$title 稍后在 MySQL 查询中使用。
问题是如何确保安全? 换句话说,如何中和任何通过 URL 发送的恶意代码。
【问题讨论】:
(对于“安全”的值等于“防止它破坏数据库”):使用任何使用bound parameters 的数据库 API。
绑定的参数倾向于让数据库处理转义(因此使用由数据库作者而不是语言作者编写的转义例程)并使用一种不太容易被遗忘的语法,因为一个重要的转义然后手动转义每个带有(例如)mysql_real_escape_string 的输入数据。
在对不同上下文中的数据执行某些操作之前,您可能需要稍后采取其他步骤(例如,确保插入 HTML 文档的安全性)
【讨论】:
您必须使用 mysql_real_escape_string() 来转义所有可能干扰您的数据库的字符。如果你显示这个标题,你还应该使用 htmlentities() 或 striptags()
【讨论】:
您可以使用 mysql_real_escape_string 函数(转义字符串中的特殊字符以用于 SQL 语句)
【讨论】:
使用查询参数。从 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);
【讨论】: