为什么PHP写的验证码会被暴力破解,如何能做到不被暴力破解呢?还有验证码一定要依赖COOKIE和SESSION吗?详细点
为什么PHP写的验证码会被暴力破解,如何能做到不被暴力破解呢?还有验证码一定要依赖COOKIE和SESSION吗?详细点
暴力破壞大法通殺一切驗證措施,防不勝防。
能否爆破於php本身無關。
圖片驗證碼非唯一的逆向圖靈測試反機器人途徑,必須綜合多種方式,例如同IP操作頻率限制等。
不需要Cookies或Session,只要你能克服TCP鏈接的固有缺點——非會話式,即需要做到通過一種途徑記錄並識別同一訪客。除了常見的Cookies和Session,通過表單/URL傳ID也是個不錯的方法。
PHP有一個選項,即允許通過URL傳遞Session ID。。。其實你自己實現其他方法,原理還是Session,而且安全性和性能可能反而不如php自己的Session。
在客户端只有 cookie,session 只是存储在cookie里的,拿sf讲,名字为sfsess
的cookie的值就是session ,就是那一大串数字字母,网站服务器端存有一份相同的 session ,与你的账号对应证明你登录了。从安全角度讲,存储在服务端才是最安全的,如果只在cookie里存储验证码结果,那么破解就相当简单了。
举例来讲:
你访问登录页时,系统随机生成4位数字比如2014
,并生成数字为2014
的图片,还有最重要的一步就是在服务器端将2014
与在服务器端你的
session 相对应。
你输入验证码提交后,系统从你的 cookie 里读取 session ,取出你提交的验证码;与服务器端存储的 session 和 2014
相比较,如果匹配生成说明输入正确,不成功会重做第一步生成新的验证码。
基本上现在的验证码都是这种方式。
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
要弄清楚为什么要加验证码功能,验证码如果没有做的好,就等于形同虚设,一般性的验证码能够防刷以及机器注册等等, 你所说的暴力破解,是属于另一种情况,是因为验证码本身太简单而容易被破解软件识别,一般的由数字和字母构成,这也是为什么有的网站的验证码做成模糊的斜线或者虚线干扰形式的原因,验证码存取一般都会用session,cookie也可以,服务器端除了要做匹配验证、非空验证,而且一旦一次请求完毕,必须把session或者cookie清除掉,否则和没有验证码是一样的。。。。