【问题标题】:Using htmlspecialchars and strip_tags for more security使用 htmlspecialchars 和 strip_tags 提高安全性
【发布时间】:2023-04-10 07:08:02
【问题描述】:

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

有人建议我使用 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非常有经验的人,如果我需要做更多的事情,或者一次使用这两个命令没有意义,请给我建议。

【问题讨论】:

    标签: php html


    【解决方案1】:

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

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

    【讨论】:

    • 你能给我一个为什么我应该在后端使用它的理由吗?用户看不到 PHP 代码。它在服务器端执行。我只在我的后端目录中保留连接文件。我也在使用 PDO 连接,我不能使用 mysqli。
    【解决方案2】:

    @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

    【讨论】:

    • 哦,是的,无论如何,我正在使用那个 ^^ ty 来为您提供帮助。
    • 总是乐于提供帮助
    猜你喜欢
    • 2012-10-22
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多