条带标签 vs htmlentities vs 其他。 php 哪个安全性更好?

Strip-tags vs htmlentities vs other. Which has the better security in php?

我正在创建一个网站(假设它会有很多用户),该网站将让用户使用所有字符,因此它可能包含 ></.

所以有人建议我使用 htmlentities() 而不是 strip 标签。 htmlentities 对 SQL 注入是否相当安全?有没有比 htmlentities 和 strip 标签更好的更安全的替代方法,我可以轻松地在我的网站中实施?

我想知道那是什么,无论你的解决方案是什么,你个人如何在 php 中提高这种安全性(javascript 的帮助也是一个例外):

$current_password = strip_tags(@$_POST['currentpassword']);

$get_info = mysql_query ("SELECT first_name, last_name, bio FROM users 
WHERE username='$user' ");

这是我的简单问题。干杯。

你搞糊涂了。 strip_tags() 只应在您想从文本块中删除 HTML 标签时使用。它不应该应用于用户输入的密码。例如,如果您的用户有一个密码 hello<there>,它将删除 <there>,然后密码将只是 hello。这可能会导致很多问题。

同样,htmlentities 也无助于 SQL 注入。此函数只是将 HTML 标签和字符转换为它们的实体格式,从而防止它在网页上显示时引起问题。

为了安全地防止 SQL 注入,您不需要 htmlentities 或 strip_tags。你需要的是准备好的陈述。使用占位符正确准备查询。另外,请注意 mysql_* 函数现在已弃用;你应该使用 mysqli_* 或 PDO。

在我的脑海中,未经测试:

/* Create a new mysqli object with database connection parameters */
$mysqli = new mysqli('localhost', 'username', 'password', 'db');

if(mysqli_connect_errno()) {
  echo "Connection Failed: " . mysqli_connect_errno();
  exit();
}

/* Create a prepared statement */
$stmt = $mysqli->prepare('SELECT first_name, last_name, bio FROM users WHERE username=?');

/* Bind parameters
         s - string, b - blob, i - int, etc */
$stmt->bind_param('s', $user);

/* Execute it */
$stmt->execute();

/* Get a result set from the prepared statement */
$result = $stmt->get_result();

/* Fetch result rows as an associative array */
while ($row = $result->fetch_assoc()) {
    echo '<pre>'.print_r($row, 1).'</pre>';
    // do something with $row
}

更多信息,请参考: