This commit is contained in:
杜恒 2021-03-16 10:55:03 +08:00
parent c6ba7de430
commit 9975cf75d3
5 changed files with 56 additions and 20 deletions

View File

@ -5,18 +5,27 @@ class Intercept
{
public static function message($comment)
{
/* 如果用户输入内容画图模式 */
if (preg_match('/\{!\{(.*)\}!\}/', $comment['text'], $matches)) {
/* 如果判断是否有双引号,如果有双引号,则禁止评论 */
if (strpos($matches[1], '"') !== false || _checkXSS($matches[1])) {
$comment['status'] = 'waiting';
}
} else {
/* 判断评论内容是否包含敏感词 */
if (Helper::options()->JSensitiveWords) {
if (_checkSensitiveWords(Helper::options()->JSensitiveWords, $comment['text'])) {
throw new Typecho_Widget_Exception("评论内容包含敏感词汇!", 403);
$comment['status'] = 'waiting';
}
}
/* 判断评论是否至少包含一个中文 */
if (Helper::options()->JLimitOneChinese === "on") {
if (!preg_match("/\{!\{.{0,}/", $comment['text']) && preg_match("/[\x{4e00}-\x{9fa5}]/u", $comment['text']) == 0) {
throw new Typecho_Widget_Exception("评论至少包含一个中文!", 403);
if (preg_match("/[\x{4e00}-\x{9fa5}]/u", $comment['text']) == 0) {
$comment['status'] = 'waiting';
}
}
}
Typecho_Cookie::delete('__typecho_remember_text');
return $comment;
}
}

View File

@ -2,7 +2,7 @@
/* 获取主题当前版本号 */
function _getVersion()
{
return "6.0.6";
return "6.0.7";
};
/* 判断是否是手机 */

View File

@ -7,12 +7,39 @@ function _checkXSS($text)
{
$isXss = false;
$list = array(
'([\x00-\x08,\x0b-\x0c,\x0e-\x19])', 'script', 'javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'embed', 'object', 'frame', 'layer', 'title', 'bgsound', 'onload', 'onunload', 'onchange', 'onsubmit', 'onreset', 'onselect', 'onblur', 'onfocus',
'onabort', 'onkeydown', 'onkeypress', 'onkeyup', 'onclick', 'ondblclick', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onunload'
'/onabort/is',
'/onblur/is',
'/onchange/is',
'/onclick/is',
'/ondblclick/is',
'/onerror/is',
'/onfocus/is',
'/onkeydown/is',
'/onkeypress/is',
'/onkeyup/is',
'/onload/is',
'/onmousedown/is',
'/onmousemove/is',
'/onmouseout/is',
'/onmouseover/is',
'/onmouseup/is',
'/onreset/is',
'/onresize/is',
'/onselect/is',
'/onsubmit/is',
'/onunload/is',
'/eval/is',
'/ascript:/is',
'/style=/is',
'/width=/is',
'/width:/is',
'/height=/is',
'/height:/is',
'/src=/is',
);
if (strip_tags($text)) {
for ($i = 0; $i < count($list); $i++) {
if (strpos($text, $list[$i]) !== false) {
if (preg_match($list[$i], $text) > 0) {
$isXss = true;
break;
}
@ -30,7 +57,7 @@ function _parseCommentReply($text)
echo "该回复疑似异常,已被系统拦截!";
} else {
$text = _parseReply($text);
echo preg_replace('/\{!{(.*?)\}!}/', '<img class="lazyload draw_image" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="$1" onerror="javascript: this.src=\'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\';" alt="画图"/>', $text);
echo preg_replace('/\{!\{([^\"]*)\}!\}/', '<img class="lazyload draw_image" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="$1" onerror="javascript: this.src=\'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\';" alt="画图"/>', $text);
}
}
@ -62,7 +89,7 @@ function _parseLeavingReply($text)
} else {
$text = strip_tags($text);
$text = _parseReply($text);
echo preg_replace('/\{!\{(.*?)\}!\}/', '<img class="draw_image" src="$1" alt="画图"/>', $text);
echo preg_replace('/\{!\{([^\"]*)\}!\}/', '<img class="draw_image" src="$1" alt="画图"/>', $text);
}
}
@ -73,7 +100,7 @@ function _parseAsideReply($text, $type = true)
echo "该回复疑似异常,已被系统拦截!";
} else {
$text = strip_tags($text);
$text = preg_replace('~{!{.*~', '# 图片回复', $text);
$text = preg_replace('/\{!\{([^\"]*)\}!\}/', '# 图片回复', $text);
if ($type) echo _parseReply($text);
else echo $text;
}

View File

@ -822,7 +822,7 @@ function themeConfig($form)
NULL,
'你妈死了 || 傻逼 || 操你妈 || 射你妈一脸',
'评论敏感词(非必填)',
'介绍:用于设置评论敏感词汇,如果用户评论包含这些词汇,则将会禁止评论 <br />
'介绍:用于设置评论敏感词汇,如果用户评论包含这些词汇,则将会把评论置为审核状态 <br />
例如:你妈死了 || 你妈炸了 || 我是你爹 || 你妈坟头冒烟 (多个使用 || 分隔开)'
);
$JSensitiveWords->setAttribute('class', 'joe_content joe_other');
@ -833,7 +833,7 @@ function themeConfig($form)
array('off' => '关闭(默认)', 'on' => '开启'),
'off',
'是否开启评论至少包含一个中文',
'介绍:开启后如果评论内容未包含一个中文,则将会禁止评论 <br />
'介绍:开启后如果评论内容未包含一个中文,则将会把评论置为审核状态 <br />
其他:用于屏蔽国外机器人刷的全英文垃圾广告信息'
);
$JLimitOneChinese->setAttribute('class', 'joe_content joe_other');

View File

@ -1,6 +1,6 @@
{
"name": "typecho-joe-next",
"version": "6.0.6",
"version": "6.0.7",
"description": "A Theme Of Typecho",
"main": "index.php",
"keywords": [