【问题标题】:How to make PDO select queries HTML safe?如何使 PDO 选择查询 HTML 安全?
【发布时间】:2011-05-03 11:41:37
【问题描述】:

我是 PDO 的新手,刚开始使用它。我已经使用它插入、更新和删除了数据,而且使用起来非常简单。

在测试环境中,我向数据库中插入了一些 HTML 代码。喜欢:

<a href="google.com">Google</a>
<b>Bold text</b>
<u>Underlined text</u>

等等……

我正在尝试这个,因为我在我的网站上为用户使用了一个简单的所见即所得编辑器,并且我想确保数据是安全的。

使用以下内容:

$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 只是被执行。所以文本是粗体的,而不是文本格式。

我想知道 PDO 是否有阻止这种情况的功能。还是我只需要使用 htmlentities 和 strip_tags?

提前致谢

【问题讨论】:

    标签: php html pdo


    【解决方案1】:

    使用参数化查询将保护您的数据库免受不良数据的影响。它不会保护您的 HTML,因为那是一个完全不同的层。

    如果你想允许一些 HTML,那么你需要通过一些东西来运行数据(就在你向用户显示之前),将你想允许的 HTML 列入白名单。 p>

    我相信HTML Purifier 是希望执行此操作的 PHP 用户的首选工具之一。

    【讨论】:

    • 太棒了。这就是我一直在寻找的!非常感谢!
    【解决方案2】:

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

    【讨论】:

    • 我不知道。非常感谢您的回复。
    猜你喜欢
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多