登录|注册

验证码验证数据提交的做法

2014-05-15 10:13:44

      网页验证码验证数据提交验证方法,为什么要验证,那是为保护服务器数据安全或也是为防止网站被批量群发或批量注册。

  刚开始的验证码验证方法,这个不是很好处理,比如原来的验证码居然是在本地生成本地验证的!然后在提交数据到远程注册,无须验证用户,这样等于没有验证。现在的方法是需要把生成验证码图片的php文件移到远程服务器,由远程服务器生成验证码,发送图片到本地,本地在提交数据,服务器验证用户电脑传来的验证码数据后,验证成功,将传来的用户资料数据写入数据库,不成功则返回-1,表示验证码错误。异域提交数据,当然是用jquery的jQuery.getJSON()函数了,这个函数可以跨域提交数据,但是只支持GET传值。为了用户的资料安全,密码当然不能明码传送啦,好在用javascript就可以实现在客户端md5加密了,这个客户端加密问题解决了。

  验证码验证数据提交时遇到的问题,在IE上注册验证码老是返回失败,而其他浏览器都没问题。经过检验,原来是我们使用的IE9浏览器访问本站的时候禁止了cookie,虽然其它人的浏览器没做这个设置,这也反应了问题。跟管理服务器的同事打过招呼后,我查看了服务器php.ini配置文件,原来session设置成了仅用cookie保存sessionID,我们知道服务器分配给客户端的seesionid一般默认用cookie保存,但是也可以通过附加在url后的方式传递,打开相应选项后。由于是异域发送,这边调取的只是验证码图片,而在这里图片url里取不到seesionid,服务器也不能智能的在这个异域网页里设置隐藏的session_id项,那么只能通过手工取了。我通过$sid=file_get_contens('远程文件'),获取服务器端分配给访问用户的一个session值。在图片的src链接远程生成验证码图片的url里附加这个session,在生成验证码图片的php文件里通过GET传来的这个seeion_id值,指定当前图片文件的session_id,通过session_id(session_id值)来设置session_id,然后发送验证数据时,通过GET传值附上同样的session_id,这样就实现了session_id传值。这样做后,发现禁止cookie的IE可以注册成功了,其他浏览器又不可以了,经过检查后,发现原来其他的浏览器为了安全起见,默认设置成了seesion_id只能通过cookie传值,虽然可以铜鼓改写参数名,但是通过url传输session_id的确是不太安全的做法。传送数据问题解决了,顺利的写好程序,经在sinaapp的空间上测试,IE,firefox都都没问题。通过负责管理服务器的同事将我的代码传到服务器上后,我在firefox做了注册测试,没问题。然后以为万事大吉了。于是修改程序,先做一下浏览器判定,如果不是IE,就不用GET传递session_id,如果是IE就用GET传递,但是要是IE也设置成了禁用GET传递session_id呢?没用关系,只是一开始默认设置如此,在第一次验证码返回验证失败后,刷新验证码图片时,原来设置的是用cookie传递session_id就改成用GET,原来用GET传递session_id的就切换成用cookie。

  注册页面在本地,所以域名和服务器端域名不同域,而且原来的注册逻辑是现在本地注册,数据写入本地数据库,在提交数据到远程注册,这就容易导致本地注册成功而远程没有注册成功的问题,所以修改逻辑先在远程服务器注册成功在在本地注册,本地即使注册不成功也可以下次在绑定。

  验证码验证经过这样的测试,所用的浏览器都成功实现了跨域验证注册成功,更加起到网站的数据保护作用了。

联系我们

  • 客服热线1:13074866705
  • 企业QQ客服1:点击这里给我发消息
  • 企业QQ客服2:点击这里给我发消息

当前运行状态

  1. 服务器状态正常
  2. 服务器负载
  3. 单张图片平均识别时间2.4秒
  4. 24小时图片识别准确率99.4%

挣码|挣码打码平台(中国公司)为广大软件开发者、工作室、普通用户提供了打码平台,打码赚钱,答题打码,挣码答题,云验证码识别平台,验证码,验证码识别,全自动验证码识别技术,代答题系统,云打码等服务平台,优中取优、专业进取、利润共享、为用户提供最完美解决方案是挣码(ZM)验证码识别平台不变的品质!


友情链接:

关于我们- 联系我们- 付款方式- 帮助中心- 条款声明

闽ICP备      闽ICP备15004550号-115