坏蛋网络

 找回密码
 立即注册

微信登录

只需一步,快速开始

手机动态码快速登录

手机号快速注册登录

搜索

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

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

, |, _: W: b# M4 o! ~0 {
231121c6zczgo68wflozm2.png
解决方案如下:
\source\class\discuz的discuz_application.php
查找如下代码(在360行左右),并替换

3 c* I! I. |' I3 y0 v5 N5 n: N* u4 @
* D* x& z3 G. Q9 C- U1 D
/ b; Z; J8 e7 G9 T  S# _, _PHP+ ]) p! w8 S0 ?# L- }" s
  1. private function _xss_check() {
    5 P( y2 k8 k$ F  B' _, O8 C
  2. static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');( w. o& @$ E* V  q
  3. if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {7 h! f1 N. [9 ?! i) C9 X) ]$ |
  4. system_error('request_tainting');
    ! N- J% o: F/ e0 E
  5. }
    4 f" a) X+ Q, ?$ T5 N5 _( `) o# u) ?
  6. if($_SERVER['REQUEST_METHOD'] == 'GET' ) {5 f4 R  }- w$ a/ t
  7. $temp = $_SERVER['REQUEST_URI'];
    2 H% w4 w. u' E3 n% Y$ N3 v
  8. } elseif(empty ($_GET['formhash'])) {
    + Z* s) n9 `# d  I$ U
  9. $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');8 I$ P9 ]8 y6 H, K, j8 k' q
  10. } else {$ F* M" c6 G$ w/ t" }$ i# J
  11. $temp = '';
    * n3 V. A& a$ i: m5 C
  12. }
    $ ~/ R) a/ \) k+ l6 P# g( U* n$ o( u
  13. if(!empty($temp)) {
    3 h$ Z) e" }6 [8 l6 J5 e+ ]
  14. $temp = strtoupper(urldecode(urldecode($temp)));
    0 [. ?% O2 o3 t4 m9 I  z! Q
  15. foreach ($check as $str) {# r  K( |/ }& m# |( S1 O* }
  16. if(strpos($temp, $str) !== false) {
    6 v) {8 j/ ^" M
  17. system_error('request_tainting');; ?. v3 f+ I7 |" H: h: U
  18. }5 o1 K( i- O4 r3 T! K
  19. }
    ; R0 V  P  f# s4 H4 U" y
  20. }& ]* P+ Q# K$ i* z1 L2 Y5 J
  21. return true;
    1 C( R' S0 P2 W* _: g
  22. }
复制代码
替换为" O8 @1 W& `- \: T6 |( W
  1. private function _xss_check() {/ n1 `8 H6 M0 I( {, c
  2. $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));& E+ `3 C" p0 D1 |
  3. if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {  r) ~2 s/ O! ^
  4. system_error('request_tainting');
    , l% |, ^$ P" u# ~2 g
  5. }
    : a5 t; r4 W5 Z& @4 l3 |
  6. return true;
    4 u. e4 j8 ^8 C( P  g
  7. }
复制代码

" S) J) @8 x% h+ M+ `) i+ ?9 _& L4 l) s8 U% s4 L0 H4 x
+ j$ A( p: x& L4 R# l: y

  J2 q; y7 B' w7 o+ U; N) C* T4 F# g; N# W/ Z& p
微信图片_20230607014029.png
想说又不敢说,说了又怕被拒绝,拒绝了又怕尴尬,就是这样的。内心很痛苦的那种。
快速回复 返回顶部 返回列表