我是PDO的新手,刚刚开始使用它。我已经使用它插入,更新和删除了数据,并且使用基础知识非常简单。
在测试环境中,我将一些HTML代码插入数据库。像:
<a href="google.com">Google</a>
<b>Bold text</b>
<u>Underlined text</u>
等...
我正在尝试这个,因为我在我的网站上为用户使用了一个简单的WYSIWYG编辑器,我想确保数据是安全的。
使用以下内容:
$stmt = $dbh->prepare("SELECT * FROM naruto WHERE id = :id AND name = :name");
/*** bind the paramaters ***/
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->bindParam(':name', $name, PDO::PARAM_STR, 5);
/*** execute the prepared statement ***/
$stmt->execute();
/*** fetch the results ***/
$result = $stmt->fetchAll();
/*** loop of the results ***/
foreach($result as $row)
{
echo $row['id'].'<br />';
echo $row['name'];
echo $row['image'];
}
如果name是不同的HTML代码,则只执行HTML。所以文本是粗体而不是格式文本&lt; / B取代。
我想知道是否有PDO的功能可以阻止它。或者我只需要使用htmlentities和strip_tags?
提前致谢
答案 0 :(得分:2)
使用参数化查询可以保护您的数据库免受错误数据的侵害。它不会保护您的HTML,因为这是一个完全不同的层。
如果您想允许某些 HTML,那么您需要通过白名单列出您想要允许的HTML来运行数据(就在您向用户显示之前)。
我相信HTML Purifier是希望这样做的PHP用户的首选工具之一。
答案 1 :(得分:1)
数据库并不特别关心存储在其中的数据是否是HTML标记,数据库抽象层(如PDO)也不特别......就它们而言,它只是一个字符串。由您来处理HTML或纯文本数据。