【发布时间】:2011-01-01 01:36:02
【问题描述】:
问题:防止XSS(跨站点脚本)很简单,在任何保存的输入字段上使用strip_tags 并在任何显示的输出上运行htmlspecialchars.. . 并通过使用 PHP PDO 准备语句来防止 SQL 注入?
这是一个例子:
// INPUT: Input a persons favorite color and save to database
// this should prevent SQL injection ( by using prepared statement)
// and help prevent XSS (by using strip_tags)
$sql = 'INSERT INTO TABLE favorite (person_name, color) VALUES (?,?)';
$sth = $conn->prepare($sql);
$sth->execute(array(strip_tags($_POST['person_name']), strip_tags($_POST['color'])));
// OUTPUT: Output a persons favorite color from the database
// this should prevent XSS (by using htmlspecialchars) when displaying
$sql = 'SELECT color FROM favorite WHERE person_name = ?';
$sth = $conn->prepare($sql);
$sth->execute(array(strip_tags($_POST['person_name'])));
$sth->setFetchMode(PDO::FETCH_BOTH);
while($color = $sth->fetch()){
echo htmlspecialchars($color, ENT_QUOTES, 'UTF-8');
}
【问题讨论】:
-
没听懂你——你要去mysql_query() $save_to_database 值吗?那么你仍然需要在提交查询之前调用
mysql_real_escape_string(),否则你将无法免受 SQL 注入的保护(这又不是 XSS) -
@naivists:你确定吗?他正在使用准备好的语句。
标签: php html xss sql-injection