剥离标签与htmlentities对比其他。哪个在PHP中有更好的安全性?

时间:2015-05-23 14:33:41

标签: javascript php sql security sql-injection

我正在创建一个网站(假设它将拥有大量用户),这将使用户使用所有字符,因此它可能包含{ "type": "FeatureCollection", "features": [ { "geometry": { "type": "MultiPolygon", "coordinates": [[[[37.2732892, 55.9551567], [37.8780522, 55.9633486], [37.993164, 55.5512744], [37.1913337, 55.5559836]]]] } } ] } >和{{}等字符1}}。

所以有人建议我使用htmlentities()而不是strip标签。对于SQL注入,hmmlentities是否合理安全?还有一种更安全的方法可以轻松实现到我的网站中,这比htmlentities和strip标签更好吗?

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

<

这是我的简单问题。欢呼声。

1 个答案:

答案 0 :(得分:3)

你很困惑。只有在要从文本块中删除HTML标记时才应使用strip_tags()。它不应该应用于用户输入的密码。例如,如果您的用户使用密码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
}

有关详细信息,请参阅: