坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

[DZ教程] Discuz!您当前的访问请求当中含有非法字符,已经被系统拒绝解决方案

[复制链接]
坏蛋网络官方 发表于 2023-6-7 01:40:56 | 显示全部楼层 |阅读模式
关于Discuz!中“您当前的访问请求当中含有非法字符,已经被系统拒绝”的问题,在添加或更新文章的时候经常出现,经测试发现出现这种情况更多的在使用工具(如火车头采集器)批量发布文章时出现,仔细分析发现,当发布的正文内容出现特殊符号(&,/,<,>等)时出现这样的错误提示。
出现这样的错误主要是因为Discuz!系统的_xss_check()函数原本的意义是为了论坛安全,防止XSS攻击,一般网站使用是不会出现什么问题的,但是有些网站要接入第三方接口,当第三方接口向本站post数据的时候就会报”您当前的访问请求当中含有非法字符,已经被系统拒绝”,本文介绍一种简单的修改方法避免此错误。

( R5 ?, M: A9 @2 k/ p, l! J3 C
231121c6zczgo68wflozm2.png
解决方案如下:
\source\class\discuz的discuz_application.php
查找如下代码(在360行左右),并替换

( a' ?' s4 P3 D* y  |5 C/ e% @3 N
; F- t7 z- N# z# @- P5 a! \- u" V% @4 _6 b2 V
PHP- }* h% G* K3 B# c/ K& J$ V0 g( ?
  1. private function _xss_check() {
    3 O* m8 ^& X& L% M& n6 |& L# ^
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
    - F3 K( ]! v; X' ]5 Q% ~
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {% V- ~' i# q% N2 M* q
  4. system_error('request_tainting');
    8 i" `9 j& p& O6 [: t+ f5 {, {
  5. }7 @( g. V3 h5 p/ T
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {8 Q0 Y, x- d2 C9 T+ m# y
  7. $temp = $_SERVER['REQUEST_URI'];% D: [0 x, w5 d2 h, ?1 \% o
  8. } elseif(empty ($_GET['formhash'])) {
    , A9 p8 O9 {: q3 b( a3 L# c, [
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');& [0 ?* J2 g! `7 S( D2 v1 J- J, i6 m% K
  10. } else {
    + i8 ^/ I" {( m8 \2 [
  11. $temp = '';
    9 r6 e. `: ?% ?! W3 ]
  12. }
    : p5 t) A7 ~7 f6 n6 O
  13. if(!empty($temp)) {
    9 m4 s" B6 K3 u; L. K4 S- J% s
  14. $temp = strtoupper(urldecode(urldecode($temp)));4 _; J3 {5 O& B2 ?/ V! T) S6 e
  15. foreach ($check as $str) {& n' U) H* e* f& B0 e( D1 W
  16. if(strpos($temp, $str) !== false) {
    0 b/ s8 X6 e& {. d
  17. system_error('request_tainting');
    , p: g4 {" q. d( ^% g2 P
  18. }' S: U! m' T4 a' s
  19. }
    , J7 C/ Q/ `0 f7 Z: a) t
  20. }
    9 n  s* e" o% v0 i- T9 k
  21. return true;6 e! i" X& E& p  `# u8 o
  22. }
复制代码
替换为2 {: y7 e: ~, O5 {3 t
  1. private function _xss_check() {
    3 H2 P3 Q) d3 `9 c9 m
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
    ! [" [& c0 g2 f
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {; }5 q) B$ A4 u6 h( {* a5 ?: k& ?
  4. system_error('request_tainting');
    , d" `+ B& S* m7 C  N9 \
  5. }
    4 [# F( [6 \" N: T6 }) d
  6. return true;
    ( X$ k" w6 m! U
  7. }
复制代码
1 H& q% D6 d/ {; R

- l. h2 o7 F9 ]1 z% D9 _  W$ j

' o5 j; ~. B- @& l' C0 W& Z. E
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表