XSS又叫 CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
这种攻击方式,首当其冲的应该是评论区。有好事者喜欢在评论中添加恶意代码,攻击其他人的网站。对于PHP网站,该如何预防评论区的XSS攻击呢?可以对代码进行过滤或转义等设置。
一、过滤代码
1. 代码完全过滤掉
如果你希望去除所有评论代码标签,只留下文字内容,可以在主题functions.php文件中添加这样的代码:
- function ludou_code_escape( $incoming_comment ) {
- $incoming_comment = strip_tags($incoming_comment);
- return $incoming_comment;
- }
- add_filter( 'comment_text', 'ludou_code_escape' );
- add_filter( 'comment_text_rss', 'ludou_code_escape' );
2. 选择性代码过滤
如果你希望有选择性地去除评论代码标签:ajax 方式的评论都会用到主题下的 comment-ajax.php
文件,编辑这个文件,搜索 $comment_type = ''
,然后在这行后面添加以下代码:
- if ( '' != $comment_content ) {
- / * $filter 是需要过滤的关键词,关键词之间用分隔符 | 隔开即可。 * /
- $filter = '/<(iframe|script)/i';
- if (preg_match($filter,$comment_content,$matches)) {
- $comment_content = strip_tags($comment_content);
- }
- }
关于strip_tags过滤函数,可以参考php的strip_tags说明文档。
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
二、转义代码
1. 直接将代码完全转义
如果你想将评论内容中的全部评论代码转义,不让浏览器解释这部分代码,禁止其起任何作用,并且让代码直接显示在评论中,可以添加下面的代码到主题functions.php。
- function ludou_code_escape( $incoming_comment ) {
- $incoming_comment = htmlspecialchars($incoming_comment, ENT_QUOTES);
- return $incoming_comment;
- }
- add_filter( 'comment_text', 'ludou_code_escape' );
- add_filter( 'comment_text_rss', 'ludou_code_escape' );
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
2. 选择性转义
如果你想有选择地转义评论代码,可以搜索主题comment-ajax.php
文件中的 $comment_type = ''
,然后在这行后面添加以下代码:
- if ( '' != $comment_content ) {
- / * $filter 是需要过滤的关键词,关键词之间用分隔符 | 隔开即可。 * /
- $filter = '/<(iframe|script)/i';
- if (preg_match($filter,$comment_content,$matches)) {
- $comment_content = htmlspecialchars($comment_content).'<br />(<font color="red">系统提示:评论含危险内容,已被转义处理。</font>)';
- }
- }
密码: h96i
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2023. All Rights Reserved