坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

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

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

/ f* z4 }+ @* ?
231121c6zczgo68wflozm2.png
解决方案如下:
\source\class\discuz的discuz_application.php
查找如下代码(在360行左右),并替换

+ q# N- _9 X! G4 V4 y6 H0 Z! a
( l6 L  d* H. ]( p( s  z- |/ o, ^- r& L5 y; p+ w
PHP
( N+ i" X: M, X' m
  1. private function _xss_check() {* x/ o7 G8 I0 Y1 z4 @+ ~
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');
    ; G$ {; }2 I/ E9 w5 k
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
    7 _  T% I/ t/ A3 H
  4. system_error('request_tainting');
    ! L, Y  C2 z2 f' U! V5 C* E
  5. }
    % \! \+ G$ a1 q; D$ u
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
    , V$ Y* C: b+ N0 m  |
  7. $temp = $_SERVER['REQUEST_URI'];4 h$ @7 _. F' T5 u
  8. } elseif(empty ($_GET['formhash'])) {( S3 K1 T' e; w0 o, I$ O* }2 l2 ~3 l
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
    2 ~" N! Q/ _: }# U/ }' R( P
  10. } else {
    8 i5 G0 o4 N  J5 g- w
  11. $temp = '';  K8 e* O+ a2 o1 M
  12. }
    , q5 p- a+ G/ L& _7 a" \
  13. if(!empty($temp)) {  o. x  f8 \+ R3 Y/ v% S
  14. $temp = strtoupper(urldecode(urldecode($temp)));' y; i# U" u  g- E; [% p! J5 |% L  G
  15. foreach ($check as $str) {3 F7 ]5 W, m8 ^, R; M! w
  16. if(strpos($temp, $str) !== false) {3 k3 K, F7 A6 F3 C& i
  17. system_error('request_tainting');9 m, b# m% g' i
  18. }
    # q4 L  g8 y5 |7 K, g* d2 A
  19. }4 n6 c, z7 ]5 Z' _, R: u) t
  20. }3 X0 o7 ?: n( }
  21. return true;
    $ d; a% g1 q  P7 Q- ?: j& f
  22. }
复制代码
替换为
3 R* e3 i: w8 E% G
  1. private function _xss_check() {/ }7 W3 ~$ ~  ?8 N' |2 o
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
    " O8 L- a, k/ P8 l) z0 f$ i: J
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
    2 X" q% }6 T% y8 @% Z* y
  4. system_error('request_tainting');& @5 r, E7 r+ E+ [* w' ?
  5. }' Y& t- q8 y8 P+ h
  6. return true;
    / ]$ t0 c1 r1 x3 m9 B1 J! ]- |
  7. }
复制代码

  k" G, r6 a1 X* F$ F! G/ t9 q4 l. s' z( c& ?1 m6 i! v

% B# R0 L4 e' ]- M2 f

0 ~, r  q6 j: |  L: |: U6 |3 C* Z* Q8 V
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表