请问下jfinal的自带验证码机制是否有漏洞?

我大致看了下源码,其原理是生成一随机字符串,然后将其MD5后写入cookie。校验时取出此cookie和用户输入的字符串md5后进行比对,如果一致则表示验证码正确。

这个感觉很容易就破解了啊,在客户端自己随便生成一验证码,然后md5后,将值写入cookie,然后再提交,不就通过了么?

评论区

IvyHelen

2016-12-09 09:10

这个很久之前就提出来了, 以后的版本会改进的。

flash866

2016-12-09 09:20

@IvyHelen 对java不熟悉,请问我能否修改下这个源码么?idea里面打开后貌似是只读的不能修改

JFinal

2016-12-09 09:43

线上的源码已添加了随机盐,不仅仅是 md5,而是在服务端有随机盐参与 hash 操作,源码可以看这里:http://git.oschina.net/jfinal/jfinal/blob/master/src/com/jfinal/render/CaptchaRender.java?dir=0&filepath=src%2Fcom%2Fjfinal%2Frender%2FCaptchaRender.java&oid=7dbc8c0c03bb9e9f70af0a0fa8e6b2e5df46c1ec&sha=5c8ee137b5b8e85053461f430109a4c64f590ae3

当然,线上这个版本虽然较以前版本有改进,但仍然存在问题,jfinal 2.3 最终版已彻底改进这里

jfinal 在很早前选用 cookie 存放 captcha,初衷是为了避免在服务端存东西,从而可以更方便地做集群,由于每次版本升级有几十上百项改进,一直没有顾上这个地方的改进

IvyHelen

2016-12-12 11:17

@JFinal 2.3预计啥时候发布?

IvyHelen

2016-12-12 11:18

@flash866 你checkout代码,然后修改即可,然后自己打包成jar包。

JFinal

2016-12-12 14:14

@IvyHelen 不需要那么麻烦,只需要 public class MyRender extends CaptchaRender 然后覆盖掉其中的相关方法,用的时候这样用:render(new MyRender()) 即可

有功能需求尽量用扩展的方式,有助于未来升级,修改源码的方式只有在没有扩展办法的时候用一用

IvyHelen

2016-12-13 10:15

@JFinal 哈,,我都是直接拓展的,这个小哥问:“对java不熟悉,请问我能否修改下这个源码么” ,我就告诉了他修改源码的方式。。

热门反馈

扫码入社