为什么PHP写的验证码会被暴力破解,如何能做到不被暴力破解呢?还有验证码一定要依赖COOKIE和SESSION吗?

为什么PHP写的验证码会被暴力破解,如何能做到不被暴力破解呢?还有验证码一定要依赖COOKIE和SESSION吗?详细点

阅读 9.1k
7 个回答

要弄清楚为什么要加验证码功能,验证码如果没有做的好,就等于形同虚设,一般性的验证码能够防刷以及机器注册等等, 你所说的暴力破解,是属于另一种情况,是因为验证码本身太简单而容易被破解软件识别,一般的由数字和字母构成,这也是为什么有的网站的验证码做成模糊的斜线或者虚线干扰形式的原因,验证码存取一般都会用session,cookie也可以,服务器端除了要做匹配验证、非空验证,而且一旦一次请求完毕,必须把session或者cookie清除掉,否则和没有验证码是一样的。。。。

验证码不过是一道虚掩的门,有专门的服务拆验证码(1分钱左右一个),题主死心吧。

短信验证 哈

是你验证码太简单,和语言没关系。

不用 cookies 就用网址传 session。

暴力破壞大法通殺一切驗證措施,防不勝防。

能否爆破於php本身無關。

圖片驗證碼非唯一的逆向圖靈測試反機器人途徑,必須綜合多種方式,例如同IP操作頻率限制等。

不需要Cookies或Session,只要你能克服TCP鏈接的固有缺點——非會話式,即需要做到通過一種途徑記錄並識別同一訪客。除了常見的Cookies和Session,通過表單/URL傳ID也是個不錯的方法。

PHP有一個選項,即允許通過URL傳遞Session ID。。。其實你自己實現其他方法,原理還是Session,而且安全性和性能可能反而不如php自己的Session。

cookies也是基于session的,但是只要是程序就有破解的可能,只能说做好安全措施,提高破解的门槛方为上策

  • 破解也只是图片识别,所以现在很多验证码越来越难认,登个录都他么要打好几次验证码。
  • 在客户端只有 cookie,session 只是存储在cookie里的,拿sf讲,名字为sfsess的cookie的值就是session ,就是那一大串数字字母,网站服务器端存有一份相同的 session ,与你的账号对应证明你登录了。从安全角度讲,存储在服务端才是最安全的,如果只在cookie里存储验证码结果,那么破解就相当简单了。

    举例来讲:

  1. 你访问登录页时,系统随机生成4位数字比如2014,并生成数字为2014的图片,还有最重要的一步就是在服务器端将2014与在服务器端你的
    session 相对应。

  2. 你输入验证码提交后,系统从你的 cookie 里读取 session ,取出你提交的验证码;与服务器端存储的 session 和 2014相比较,如果匹配生成说明输入正确,不成功会重做第一步生成新的验证码。

    基本上现在的验证码都是这种方式。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
101 新手上路
子站问答
访问
宣传栏