PHP安全性-结合strip_标记()的功能&;htmlspecialchars();

PHP安全性-结合strip_标记()的功能&;htmlspecialchars();,php,html,security,xss,Php,Html,Security,Xss,我希望我的论坛用户能够插入链接和其他允许的标签。例如,我希望文章中的以下HTML按照作者的意图显示(即作为功能链接显示): 但是,我希望保持一定程度的安全性,并且一直在阅读()和()。起初我认为我可以使用带标签的东西,比如: <?php $link_string = strip_tags($link_string, '<a>'); ?> 但是如果我理解正确,strip_标签并不像htmlspecialchars那样保护我。例如,使用特殊字符的错误HTML代码会使

我希望我的论坛用户能够插入链接和其他允许的标签。例如,我希望文章中的以下HTML按照作者的意图显示(即作为功能链接显示):


但是,我希望保持一定程度的安全性,并且一直在阅读()和()。起初我认为我可以使用带标签的东西,比如:

<?php $link_string = strip_tags($link_string, '<a>'); ?>

但是如果我理解正确,strip_标签并不像htmlspecialchars那样保护我。例如,使用特殊字符的错误HTML代码会使我易受攻击。链接标记的样式和onmouseover属性也是如此


在清除潜在有害字符和代码的同时,最简单的解决方案是什么?我是否可以将这两个PHP函数结合起来,以一种简单的方式执行此操作

我建议使用stripslashes(),如果这是一个数据库,也可以使用mysql\u real\u escape\u string()


您几乎需要使用功能齐全的HTML解析器和消毒器。总体工作流程如下所示:

  • 用户输入他们的HTML
  • 您可以使用解析器解析它
  • 你只保留你想要的(
    )来清理解析的内容,如果它不符合你的需要,HTML净化器网站有一个。我相信默认的HTML净化器配置将保留链接



    强制性参考:。

    虽然这是真的,但问题是关于XSS攻击,而不是SQL注入。此外,我不建议使用这些函数,XSS和SQL注入仍然是可能的。当您说要小心这些属性时,我如何执行疲劳?您只需查看文档,验证默认配置离子剥离它们!:-)
    <?php $link_string = strip_tags($link_string, '<a>'); ?>
    
    // without SQL.
           function safeData($data) {
            $returnData = stripslashes(strip_tags(htmlspecialchars(trim($data))));
            return $returnData; 
        }
    
    // with SQL.
           function safeDataMySQL($data) {
            $returnData = mysql_real_escape_string(stripslashes(strip_tags(htmlspecialchars(trim($data)))));
            return $returnData; 
        }