管理员
作为开源贡献者参与 MTR 的开发。
 
|
确实是这个“我的马甲”插件在引起数据库错误,不过我以为这里并没有密码爆破/注入的问题。2 P& X0 u, ~2 _7 Q
$ O* A! M# j$ z) Z这个插件里的Hash算法在数据库里对所有用户都用同样的盐,所以同时能看到输入和输出确实理论上能够还原盐,不过我以为爆破难度不小。而且即使得到盐也很难反解出其他用户的密码。
! j7 G- e7 f: P8 _6 L以及 Discuz 主数据库是使用完全不同且每用户都不同的盐的,所以那边并没问题。- D1 N- K- L5 d+ |2 N
/ x2 x: q/ s- u1 @
关于 SQL/XSS 注入问题,在涉及到的 memcp.inc.php 源码中
( b+ ]* p$ u' s! I; x) t# E% _- if($_GET['pluginop'] == 'add' && submitcheck('adduser')) {
- Z6 P2 v; t5 l- k4 H - if($singleprem && in_array($_GET['usernamenew'], $permusers) || !$singleprem) {" f: n; V0 C$ d" I& l6 O
- $usernamenew = addslashes(strip_tags($_GET['usernamenew']));
% n# F- @4 ]" n8 l0 \ V* ^ - $logindata = addslashes(authcode($_GET['passwordnew']."\t".$_GET['questionidnew']."\t".$_GET['answernew'], 'ENCODE', $_G['config']['security']['authkey']));
: w0 I9 F: t- v% E( a" y - if(C::t('#myrepeats#myrepeats')->count_by_uid_username($_G['uid'], $usernamenew)) {
; G+ r3 E5 \ \+ s! n# r - DB::query("UPDATE ".DB::table('myrepeats')." SET logindata='$logindata' WHERE uid='$_G[uid]' AND username='$usernamenew'");
8 t* z; C0 ]6 |6 J) J - } else {
a" s4 h& `5 d4 T) X; \ X - $_GET['commentnew'] = addslashes($_GET['commentnew']);
, d7 i8 A X) V' g3 V) L' L6 F - DB::query("INSERT INTO ".DB::table('myrepeats')." (uid, username, logindata, comment) VALUES ('$_G[uid]', '$usernamenew', '$logindata', '".strip_tags($_GET['commentnew'])."')");
/ f: ?- t& H. h% C3 r3 U - ...
复制代码 确实是在做字符串拼接,这可不是好文明;不过它对输入数据进行了 addslashes 和 strip_tags,所以这里应该是回避了 SQL/XSS 注入的问题。* f' Q7 o* |* y+ v! Q3 F- m$ J2 J
* ?$ N/ w- z+ r- ?6 M; T
Discuz 系统本身似乎并未提供使它不显示错误信息的方法,也就是没得配置不改 Discuz 代码就关不掉?2 U, z7 N9 y! E. N# K
MCBBS 也是会照样显示数据库错误的(大概 5 年前看到)。9 H9 n/ C9 a% G' }" a- B
这个倒是可以改改 Discuz 代码来关闭,不过有点治标不治本。
+ g9 @2 a4 P/ Q2 |; h- l1 m/ q- \7 G- z, n, W
倒是可以考虑考虑关掉这个马甲插件,看起来代码质量一般的样子(" {! K8 _$ b/ ? n$ T* N
# X) R* G4 o/ W1 j" N2 n |
|