管理员
作为开源贡献者参与 MTR 的开发。
 
|
确实是这个“我的马甲”插件在引起数据库错误,不过我以为这里并没有密码爆破/注入的问题。
7 I1 J5 v& J9 K" B; W0 z, s# _; j
9 T6 _& m; [" ^" k+ N' [* F这个插件里的Hash算法在数据库里对所有用户都用同样的盐,所以同时能看到输入和输出确实理论上能够还原盐,不过我以为爆破难度不小。而且即使得到盐也很难反解出其他用户的密码。/ @6 P* F( y, @3 S$ y' G1 z8 i
以及 Discuz 主数据库是使用完全不同且每用户都不同的盐的,所以那边并没问题。
2 N4 B, u* | y! s
, Q/ s& b: | K; B0 t' |关于 SQL/XSS 注入问题,在涉及到的 memcp.inc.php 源码中" i; l6 \7 |' U4 ~8 i$ b. ]$ |
- if($_GET['pluginop'] == 'add' && submitcheck('adduser')) {9 Q" Y. v; s, n# o6 U* l
- if($singleprem && in_array($_GET['usernamenew'], $permusers) || !$singleprem) {
3 I3 x. r$ D* \& S/ w - $usernamenew = addslashes(strip_tags($_GET['usernamenew']));
% d9 k. s/ L, y8 x6 C; [ - $logindata = addslashes(authcode($_GET['passwordnew']."\t".$_GET['questionidnew']."\t".$_GET['answernew'], 'ENCODE', $_G['config']['security']['authkey']));# _. g1 Y2 u' h- y
- if(C::t('#myrepeats#myrepeats')->count_by_uid_username($_G['uid'], $usernamenew)) {) T0 k) M1 w2 Q: a9 K# X
- DB::query("UPDATE ".DB::table('myrepeats')." SET logindata='$logindata' WHERE uid='$_G[uid]' AND username='$usernamenew'");9 ]! \$ z0 ], _+ [
- } else {' s2 u8 K. y& r- W$ u1 M9 j9 t
- $_GET['commentnew'] = addslashes($_GET['commentnew']);
' w# A1 o. `. G& o* _: Y+ T* l- T - DB::query("INSERT INTO ".DB::table('myrepeats')." (uid, username, logindata, comment) VALUES ('$_G[uid]', '$usernamenew', '$logindata', '".strip_tags($_GET['commentnew'])."')");* p2 i+ r: g( m, S4 J
- ...
复制代码 确实是在做字符串拼接,这可不是好文明;不过它对输入数据进行了 addslashes 和 strip_tags,所以这里应该是回避了 SQL/XSS 注入的问题。
$ X: k0 ~, D K' a
$ X; Q' K3 I3 O7 R) D @8 ~4 G0 XDiscuz 系统本身似乎并未提供使它不显示错误信息的方法,也就是没得配置不改 Discuz 代码就关不掉?9 J" \* |7 \8 M& m
MCBBS 也是会照样显示数据库错误的(大概 5 年前看到)。$ J- P2 ?8 S: J
这个倒是可以改改 Discuz 代码来关闭,不过有点治标不治本。! V' D* P$ t2 [
' F; L& i+ S9 A) a倒是可以考虑考虑关掉这个马甲插件,看起来代码质量一般的样子(
# `9 B/ J0 a% J9 O2 ^# W- m- Z* A6 k E1 K9 [; c& J
|
|