我正在努力寻找一种让用户提交数据的好方法,在这种情况下允许HTML并尽可能安全和快速。我知道这个网站上的每个人似乎都在想http://htmlpurifier.org是这里的答案。我部分同意。htmlpurifier拥有用于过滤用户提交的HTML的最佳开源代码,但该解决方案非常庞大,不利于高流量站点的性能。我什至有一天可能会使用那里的解决方案,但现在我的目标是找到一种更轻量级的方法。我已经使用下面的2个函数大约2年半了,目前还没有遇到任何问题,但我认为是时候听取专业人士的意见了,如果他们能帮助我的话。第一个函数称为FilterHTML($string),它在用户数据保存到mysql数据
我得到了一个网站来修复最近被使用SQL注入(inject)攻击的网站。据我所知,Havij自动SQL注入(inject)器用于将代码插入到url的查询字符串参数中。该网站是自定义CMS构建的,有点过时了。我认为不太可能进行全面重建。防止这种情况再次发生的最佳方法是什么?我是一名PHP开发人员,但通常只是对表单进行验证,或者使用已经内置此功能的系统-wordpress、codeigniter、drupal等。任何想法或想法都会受到赞赏。谢谢 最佳答案 只有一个简单的规则:被放入sql查询的每个变量(不管它来自哪里——来自用户或已经从数
我一直在更新成员(member)页面系统,其中一项要求是允许在某些字段上使用粗体、下划线、斜体、字体颜色和链接,但不允许字体大小或样式-所有这些都与所见即所得的编辑器。这最初是通过文本区域和一些最小的HTML过滤完成的,即删除用preg_replace().我知道这很疯狂而且绝对不安全。我的第一个修改是使用TinyMCE并禁止在TinyMCE中使用某些标签,唯一的问题是显然我不能依赖TinyMCE作为任何类型的验证器,并且我发现保护HTML输入以防止XSS是一个绝对的雷区。我花了最后一个小时左右的时间阅读某些实践,似乎几乎不可能允许某些HTML标签/属性而不弄乱当前的配置文件,并进一步
我打算使用Markdownsyntax在我的网页中。我会将用户输入(原始的、没有转义的或其他的)保存在数据库中,然后像往常一样打印出来并使用htmlspecialchars()即时转义。.这是它的样子:echomarkdown(htmlspecialchars($content));通过这样做,我可以免受XSS漏洞和Markdown的影响。或者,至少,有点工作。问题是,比方说,>语法(我认为还有其他情况)。简而言之,引用你做这样的事情:>这是我的引述。在转义并解析为Markdown之后,我得到了这个:>这是我的引述。自然地,Markdown解析器不会将>识别为“引用的符号”,它不会工作
我正在浏览我的网站并进行安全审核。我只是简单地接受了我需要清理所有用户输入的事实,但我从未真正停下来尝试过真正发生的事情。我现在开始尝试。我在PHP页面上有一个典型的联系表单。这是_POST荷兰国际集团数据。$_POST["first_name"];等等我这样做$firstName=htmlspecialchars($_POST["first_name"]);清理并显示如下所示的消息。echo$firstName.',thankyouforyourinterest.We'llbeintouchsoon!'我开始玩这个,如果我输入类似alert('hello')的东西在名字字段中,htm
这两种方法中哪一种是防止xss攻击的更好方法?保存在数据库中的HTMLEntities显示/回显时的HTMLEntities我发现第一个更好,因为您可能会在显示时忘记添加它。 最佳答案 whichofthetwoisabetterwaytopreventxssattack.HTMLEntitieswhilesavingindbHTMLEntitieswhiledisplaying/echoing2—您应该在最后一刻转换为目标格式。如果您决定要在电子邮件、PDF中使用相同的内容,将相同的内容作为返回给用户进行编辑的文本等,这可以让您免
我有一个名为action.php的文件,它将执行一些操作。我想将其公开为纯JSON或JSONP输出。用户将使用如下URL调用它:action.php?jsonp=callback在我的action.php中我正在做这样的事情$jsonp=isset$_GET["jsonp"]?$_GET["jsonp"]:false;$output=execute_action();if($jsonp){header('Content-Type:application/javascript');printf("%s(%s)",$jsonp,json_encode($output));}else{hea
我们使用Codeigniter创建了一个项目,它非常酷且高效。CI具有良好的表单验证功能,有助于保护系统,但我很难找到使用规则的正确方法。请看下面假设ID是一个整数字段,这样我就可以设置$this->form_validation->set_rules("ID","FORMID","required|trim|integer");我认为这已经足够了,因为如果ID字段包含integer以外的内容,表单验证将返回错误。但是普通的FORM字段(文本区域或普通输入类型文本字段)的规则应该是什么,要求不允许使用HTML(或需要去除这些标签)XSS清理SQL注入(inject)预防我现在正在做$t
我使用Markdown为我的论坛脚本中的用户写帖子提供了一种简单的方法。我正在尝试清理每个用户输入,但Markdown的输入有问题。我需要在数据库中存储Markdown文本,而不是HTML转换版本,因为允许用户编辑他们的帖子。基本上我需要像StackOverflow那样的东西。我读了thisarticle关于Markdown的XSS漏洞。我找到的唯一解决方案是在我的脚本提供的每个输出之前使用HTML_purifier。我认为这会减慢我的脚本,我想输出20个帖子并为每个帖子运行HTML_purifier...所以我试图找到一种解决方案来清除XSS漏洞,即清除输入而不是输出。我无法在输入上
如果我的网站只允许用户查看他们自己提交的数据,而永远不允许其他用户提交的数据(即没有一般的“帖子”等)——那么我的网站是否真的存在XSS风险?我仍将致力于XSS解决方案(如httmlspecialchars()等)-但我很好奇攻击者是否可以通过查看他们自己的XSS攻击获得任何东西? 最佳答案 攻击者无法通过对自己使用跨站点脚本技术获得任何好处。跨站点脚本的目的是以恶意方式操纵向用户显示的页面元素,无论是网络钓鱼还是读取cookie。换句话说,攻击只能影响客户端实体。但是,请务必牢记“用户只查看自己的数据”的含义。假设我有一个网站,用