我不相信是从零开始搭建的,瑞贝克虽然坏但不蠢,而重复造大量轮子显然很蠢。
但整个页面布局和UI风格不像dicuz或者nodebb。是寻找一个小众的论坛框架搭建吗?
另外从浏览器获取的js脚本来看,数据库加密用的好像是非常原始的MD5加密方式,虽然不先端,还是保证了数据安全。比起墙内各种以明文记录数据的数据库例如已遭数据窃取的申康码这种要安全的多。
我不相信是从零开始搭建的,瑞贝克虽然坏但不蠢,而重复造大量轮子显然很蠢。
但整个页面布局和UI风格不像dicuz或者nodebb。是寻找一个小众的论坛框架搭建吗?
另外从浏览器获取的js脚本来看,数据库加密用的好像是非常原始的MD5加密方式,虽然不先端,还是保证了数据安全。比起墙内各种以明文记录数据的数据库例如已遭数据窃取的申康码这种要安全的多。
不需要论坛模板,Jinja和Flask足够建立一个网站框架了。剩下的不是造轮子而是仿轮子,比如页面元素的位置和颜色,这个就是CSS罢了。只要网页模板就能做一个这样的界面。
数据库本身并不安全,浏览器看到的js脚本是前端,数据库程序在后端。如果你有能力黑进他的主机,那么数据库是可以拖库的。他唯一的好处是对用户的密码加盐了,所以你就算拖库也拿不到用户的密码--但是用户的活动信息还是拿到了。这点看来和墙国泄漏的那些数据库并无差异。
前端开发我做过,用的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服务日志一样可以找到。
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.js。api()
不是路由的名字,而是一个js函数,用来向后端发起异步请求。
客户端MD5哈希在未来将会废弃,目前有两条可能的路线:
所以不收集用户手机号等额外信息就是最基本的安全措施。
@孙先树 #192280 不泄漏敏感数据的原因是没有敏感数据