使用htmlspecialchars和strip_tags来提高安全性

时间:2019-03-21 04:58:53

标签: php html

我正在编写自己的简单论坛。该论坛没有很多选项,例如表情符号,发布代码,发布图片,发布视频。用户只能将文本作为帖子。

有人建议我使用HTML Purifier,但我不明白这一点。我相信此净化器适用于输入具有上述选项的网站(张贴视频,图片,代码等)。我的帖子仅包含文字。我在这里寻求一些建议。 htmlspecialcharsstrip_tags是否足以保护我的网站?这是我的代码。

    // Removing the tags
    $post = strip_tags($post);
    // This encoding is made in order to prevent the user from making XSS attacks.
    // Encoding the user's post...
    $post = htmlspecialchars($post);

在我看来,这似乎毫无意义,但是由于我没有经验,所以不得不寻求建议。首先,我删除标签,然后对帖子进行编码,因为标签已被删除,因此没有要编码的内容。我这样做是因为我对网站的安全性感到疯狂。

我的手总是颤抖,因为在我的脑海中,总是怀疑还有一些地方容易受到伤害。我仍然怀疑,即使使用了这两个PHP命令,我仍然容易受到XSS的攻击。我正在服务器端检查帖子的长度,以防用户编辑了可以放入帖子中的最大/最小允许长度。

我正在使用准备好的语句,正在删除标签,正在对帖子进行编码以提高安全性。.我仍然觉得需要填补一个漏洞。如果有人对PHP很有经验,请给我建议,如果我需要做更多事情,或者一次使用这两个命令毫无意义。

2 个答案:

答案 0 :(得分:4)

我建议在php后端使用代码。像这样

mysqli_real_escape_string($con, $_POST['variable']). This is a better practice.

答案 1 :(得分:0)

@BlackSun询问如何处理PDO。这是另一个版本

   // where $db is your PDO connection
$stmt = $db->prepare("SELECT * FROM animals WHERE animal_id = :animal_id AND 
animal_name = :animal_name");

/*** bind the paramaters ***/
$stmt->bindParam(':animal_id', $animal_id, PDO::PARAM_INT);
$stmt->bindParam(':animal_name', $animal_name, PDO::PARAM_STR, 5);

/*** execute the prepared statement ***/
$stmt->execute();

或者您可以参考here