管理员
作为开源贡献者参与 MTR 的开发。
|
确实是这个“我的马甲”插件在引起数据库错误,不过我以为这里并没有密码爆破/注入的问题。7 ]% q, \( Y- s* ?7 A9 Y. a
( l: [6 l+ m' c" c3 b/ f" e, Z
这个插件里的Hash算法在数据库里对所有用户都用同样的盐,所以同时能看到输入和输出确实理论上能够还原盐,不过我以为爆破难度不小。而且即使得到盐也很难反解出其他用户的密码。
0 h! ^: Q# M; l" I" Q以及 Discuz 主数据库是使用完全不同且每用户都不同的盐的,所以那边并没问题。 P# ]5 o) x$ o. a0 p
* c5 W' [$ z7 W5 l6 i关于 SQL/XSS 注入问题,在涉及到的 memcp.inc.php 源码中
" Q8 s6 F9 a/ Z3 j2 v& k- if($_GET['pluginop'] == 'add' && submitcheck('adduser')) {
O5 c" [2 S4 N - if($singleprem && in_array($_GET['usernamenew'], $permusers) || !$singleprem) {
! |! S1 k2 x2 I+ Z; s" A - $usernamenew = addslashes(strip_tags($_GET['usernamenew']));
8 S' b, S; Y) L7 m `" d - $logindata = addslashes(authcode($_GET['passwordnew']."\t".$_GET['questionidnew']."\t".$_GET['answernew'], 'ENCODE', $_G['config']['security']['authkey']));
* p1 B8 c& j4 l2 T7 o - if(C::t('#myrepeats#myrepeats')->count_by_uid_username($_G['uid'], $usernamenew)) {- B! H6 e; _- t8 p' u
- DB::query("UPDATE ".DB::table('myrepeats')." SET logindata='$logindata' WHERE uid='$_G[uid]' AND username='$usernamenew'");3 {. O) m1 e1 W9 d+ C' m. ]$ N
- } else {
$ U. M. r: G" V3 G - $_GET['commentnew'] = addslashes($_GET['commentnew']);( s# i0 v4 n' ?5 K# b; ~
- DB::query("INSERT INTO ".DB::table('myrepeats')." (uid, username, logindata, comment) VALUES ('$_G[uid]', '$usernamenew', '$logindata', '".strip_tags($_GET['commentnew'])."')");. A4 s3 z+ l6 i2 g7 V0 \/ b2 u0 S
- ...
复制代码 确实是在做字符串拼接,这可不是好文明;不过它对输入数据进行了 addslashes 和 strip_tags,所以这里应该是回避了 SQL/XSS 注入的问题。* @) @( M, f' t B2 {! v
1 V) Z7 X- J+ L7 O
Discuz 系统本身似乎并未提供使它不显示错误信息的方法,也就是没得配置不改 Discuz 代码就关不掉?
$ i/ |! f( V. H" ZMCBBS 也是会照样显示数据库错误的(大概 5 年前看到)。
2 n. M% m4 v0 t1 ?# X, I这个倒是可以改改 Discuz 代码来关闭,不过有点治标不治本。
: R9 b6 W6 U" N
& [6 c" a$ G+ ?" e7 S倒是可以考虑考虑关掉这个马甲插件,看起来代码质量一般的样子(
& @. T, E# p( c. o/ x
$ \/ O# m2 [! i. Q/ O6 x# Z8 x |
|