常见的表单安全措施及应对策略
一 隐含输入字段值
字段的值对浏览器可见,但是对用户不可见。隐含字段主要用于阻止爬虫自动提交表单。
用隐含字段阻止网络数据采集的方式主要有两种:
第一种是表单页面上的一个字段可以用服务器生成的随机变量表示。如果提交时这个值不在表单处理页面上,服务器就有理由认为这个提交不是从原始表单页面上提交的,而是由一个网络机器人直接提交到表单处理页面的。绕开这个问题的最佳方法就是,首先采集表单所在页面上生成的随机变量,然后再提交到表单处理页面。
第二种方式是‘蜜罐’(honey pot)。如果表单包含一个具有普通名称的隐含字段(设置蜜罐圈套),比如‘username’或‘email address’,设置不太好的网络机器人往往不管这个字段是不是对用户可见,直接填写这个字段并向服务器提交,这样就会中服务器的蜜罐圈套。服务器会把所有含隐含字段的真实值都忽略。
二 避免蜜罐
方法 1 :
看懂返回的前端html代码
方法 2:
使用selenium,通过is_displayed()可以判断元素在页面上是否可见。
fields = driver.find_elements_by_tag_name('input') for field in fields: if not field.is_displayed(): xxx
三 应对,问题检查表
1 如果你从网络服务器收到的页面是空白的,缺少信息,或遇到其他不符合你预期的情况(或者不是你在浏览器上看到的内容),有可能是因为网站创建页面的JavaScript执行有问题。推荐selenium
2 如果你准备向网站提交表单或发出POST请求,记得检查一下页面的内容,看看你想提交的每个字段是不是都已经填好,而且格式也正确。用Chrome浏览器的网络面板查看发送到网站的POST命令,确认你的每个参数都是正确的
3 如果你已经登录网站却不能保持登录状态,或者网站上出现了其他的‘登录状态’异常,请检查你的cookie。确认在加载每个页面是cookie都被正确调用,而且你的cookie在每次发起请求时都发送到了网站上。
4 如果你在客户端遇到了HTTP错误,尤其是403禁止访问的错误,这可能说明网站已经把你的IP当做机器人了,不再接受你的任何请求。你要么等待你的IP地址从网站黑名单里移除,要么就换个IP地址。如果你确定自己并没有被封杀,那么在检查下面的内容。
5 确认你的爬虫在网站上的速度不是特别快。快速采集是一种恶习。
6 还有一件必须做的事情,修改你的请求头!
7 确认你没有点击或访问任何人类用户通常不能点击或接入的信息。