问问前端开发人员,瑞贝克是基于哪套论坛模板魔改出2047的?

我不相信是从零开始搭建的,瑞贝克虽然坏但不蠢,而重复造大量轮子显然很蠢。

但整个页面布局和UI风格不像dicuz或者nodebb。是寻找一个小众的论坛框架搭建吗?

另外从浏览器获取的js脚本来看,数据库加密用的好像是非常原始的MD5加密方式,虽然不先端,还是保证了数据安全。比起墙内各种以明文记录数据的数据库例如已遭数据窃取的申康码这种要安全的多。

其他人 于 8月13日 编辑
赞同 0
724 次浏览
8 个评论
时间 
linda rico y libre

不需要论坛模板,Jinja和Flask足够建立一个网站框架了。剩下的不是造轮子而是仿轮子,比如页面元素的位置和颜色,这个就是CSS罢了。只要网页模板就能做一个这样的界面。

数据库本身并不安全,浏览器看到的js脚本是前端,数据库程序在后端。如果你有能力黑进他的主机,那么数据库是可以拖库的。他唯一的好处是对用户的密码加盐了,所以你就算拖库也拿不到用户的密码--但是用户的活动信息还是拿到了。这点看来和墙国泄漏的那些数据库并无差异。

@linda

前端开发我做过,用的nodejs内核驱动的react框架。你说的flask好像是python的框架。整个流程先做组件开发,之后的页面布局设计当然是直接从控制台就可以获取到。

那个md5js脚本的用途不明,但是我翻上传数据和js文件,发现还是做了哈希化处理,并非明文传输。


api({action:'login',username:username,password_hash:hash_user_pass(username,password),}).then(_=>{if(document.referrer.match('/register')||document.referrer.match('/login')||document.referrer==""){window.location.href='/'}else{window.location.href=document.referrer}}).catch(err=>{alert(err)
t.disabled=false})});});});

上面的就是整个api鉴权脚本。是往/api路由里传值。下面是hash函数构造。这两个模块应该都不是瑞贝克写的,而是本身组件里的内置方法。只是看到稍微改了下加密算法。可以看到首先就是对表单里的用户密码两个值进行md5加密。然后再拼接其他数值,再套一层md5。

function hash_user_pass(username,password){

var fin=md5(password+username)

var pi=h=>parseInt(h,16)

var h2a=h=>h.split('').map(pi)

var sum=k=>k.reduce((a,b)=>a+b)

var times=8964+sum(h2a(fin))*2047%8964

print(times)

for(var i=0;i<times;i++){switch(pi(fin[31])%3){case 0:fin=md5(password+fin+username);break

case 1:fin=md5(username+fin+password);break

case 2:fin=md5(fin+password+username);break

default:return 'this is NOT cryptographically secure but enough of a headache'}}

return fin}

他后台数据什么情况我不清楚,但是只要是明文存储肯定不安全,类似身份证或者手机号这种信息入库之前至少进行非对称加密。另外ngnix或者apache这种中间件本身就能记录访问ip。即便不入录入后台数据,调阅web服务日志一样可以找到。

作者 于 8月13日 编辑
47小管家 2047,自由人的精神角落,一个无需手机号和邮箱即可发言的社区。讨论时事、政治、文艺、IT技术等话题。

2047的代码是从零开始写的,网站程序本身只依赖flask(路由)、jinja2(模板引擎)和Werkzeug(处理http请求和响应)。另有pillow库处理图像,bs4渲染markdown,但非核心依赖库。

如果和过去的Archive对比,可以发现2047的网页风格一直在改变。比起过去的代码,2047绝大多数的前端代码已经重写过。

2047使用Jinja2模板后端渲染,模板代码共3500多行,控制UI风格的CSS共2500行,JS主要用来提交API,除去第三方依赖,总共1600多行。后端由纯python写成,总共用了4000多行python代码。

用户密码在2047后台是哈希存储的(尽管有人习惯把这个叫做“加密存储”),后台看不到也无法看到密码明文。密码首先会在前端进行几千次md5哈希,然后上传到后端,加入128bit盐后再做PBKDF2哈希(HMAC-SHA256,迭代十万次),最后保存密码散列。

md5.js的用处是在这一步做密码哈希,其来源是: https://github.com/blueimp/JavaScript-MD5/blob/master/js/md5.jsapi()不是路由的名字,而是一个js函数,用来向后端发起异步请求。

客户端MD5哈希在未来将会废弃,目前有两条可能的路线:

  1. 改为服务端Argon2id哈希。优点是登录时可避免使用JS,因此支持tor浏览器的safest模式。
  2. 改为客户端Argon2id/PBKDF2 + 服务端Argon2id哈希。优点是服务器不接收明文密码,可以打消传输明文密码的安全顾虑。

@47小管家 #192291

他的技术栈原来是python,好家伙,从没听其谈过爬虫技术和AI。

原生js没有md5加密函数,也是才知道,难怪会引入一个外部md5函数。之前看不明白还以为js原生就有md5。

api不是路由,那登录的时候会往里面patch加密后的密码值,又是什么情况。

linda rico y libre

@广府畜生瑞贝壳 #192285

他后台数据什么情况我不清楚,但是只要是明文存储肯定不安全,类似身份证或者手机号这种信息入库之前至少进行非对称加密。另外ngnix或者apache这种中间件本身就能记录访问ip。即便不入录入后台数据,调阅web服务日志一样可以找到。

后台数据明文是很正常的,因为有后台权限的人,就有加密解密权限,否则前台用户就看不到信息了。还“类似身份证或者手机号这种信息入库要进行非对称加密”,没用的兄弟,数据库库都在后台,你还不如把中间服务器和后台服务器分开,结构如下: 用户->CDN->中间->后台,但是这种设计访问量一大,延迟就不可接受了。

@linda #192306

加密后放到后台数据库,取出时通过前端脚本解密,完全可行,而且不少网站就是这么做得。

不存在什么用户看不到数据的问题。

自由主义者
史蒂芬 喜欢近代历史,有时间上传一些好的书籍,大家交流分享
标记为删除
时间 

欲参与讨论,请 登录注册