在预准备语句中使用htmlspecialchars()或htmlentities()

时间:2012-04-11 09:14:13

标签: php xss htmlspecialchars

我使用预准备语句来存储,检索数据或从数据库更新数据。如果我使用预准备语句,是否需要使用htmlspecialchars()或htmlentities()?

根据我的理解,你在插入数据时不需要使用htmlspecialchars(),它只涉及输出的html ......

我遇到的情况是我使用预准备语句来存储来自寄存器形式的用户输入:

$stmt = $conn2->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
$stmt->bind_param('sss', $username, $email, $password);
$stmt->execute();

我有另一个脚本在登录时检索用户名和密码,并在屏幕上显示用户名,如下所示:

$stmt = $conn2->prepare("SELECT username FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$stmt->store_result();

if ($stmt->num_rows == 1) {

$stmt->bind_result($name);
$stmt->fetch();

我还将用户名放在SESSION中并像这样回应了会话:

echo $_SESSION['user']['username']

从这个例子中,我是否需要在显示用户名时使用htmlspecialchars()或htmlentities()?这是输出HTML的意思吗?

如果是这样,我将在哪里实现htmlspecialchars()或htmlentities()??

1 个答案:

答案 0 :(得分:2)

数据库不关心HTML。

如果要将数据插入到HTML文档中,请使用其中一个,并在插入HTML文档之前立即执行此操作(在插入数据库之前不会立即执行此操作,您可能需要再次将原始数据用于其他目的)。