【问题标题】:The use of htmlspecialchars() or htmlentities() in prepared statements在准备好的语句中使用 htmlspecialchars() 或 htmlentities()
【发布时间】:2012-04-11 09:14:12
【问题描述】:

我正在使用准备好的语句在数据库中存储、检索和更新数据。如果我使用准备好的语句,是否需要使用 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()??

【问题讨论】:

标签: php xss htmlspecialchars


【解决方案1】:

数据库不关心 HTML。

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

【讨论】:

  • 那么在回显包含用户名的会话时是否需要使用 htmlspecialchars?
  • 如果您将其回显到 HTML 文档中,可以(除非您已经确保用户名不能包含 HTML 文档中具有特殊含义的字符)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 2014-06-22
  • 2016-12-30
  • 1970-01-01
相关资源
最近更新 更多