如何使PDO选择查询HTML安全?

时间:2010-11-01 15:25:46

标签: php html pdo

我是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?

提前致谢

2 个答案:

答案 0 :(得分:2)

使用参数化查询可以保护您的数据库免受错误数据的侵害。它不会保护您的HTML,因为这是一个完全不同的层。

如果您想允许某些 HTML,那么您需要通过白名单列出您想​​要允许的HTML来运行数据(就在您向用户显示之前)。

我相信HTML Purifier是希望这样做的PHP用户的首选工具之一。

答案 1 :(得分:1)

数据库并不特别关心存储在其中的数据是否是HTML标记,数据库抽象层(如PDO)也不特别......就它们而言,它只是一个字符串。由您来处理HTML或纯文本数据。