Home >Backend Development >PHP Tutorial >网站上有没有有效的方法可以在一定程度上防止用户手动构造传送请求而不经过浏览器?

网站上有没有有效的方法可以在一定程度上防止用户手动构造传送请求而不经过浏览器?

WBOY
WBOYOriginal
2016-06-06 20:26:531140browse

当然没有十全十美的方法。
只是在一定程度上。
比如浏览器端cookie验证啦等等。。

回复内容:

当然没有十全十美的方法。
只是在一定程度上。
比如浏览器端cookie验证啦等等。。

忍不住来回答个:

简单而言:没有

HTTP协议所传输的内容都是公开的明文,cookie、referer都只是HTTP头中的一个字段,很容易伪造 —— 比如随便找个python爬虫的教程,都能轻易地加上这两个字段。

当然,如果加了cookie和referer校验后,不懂python爬虫之类的人员就可以pass掉了。


感觉LZ问题没问到点子上。很好奇为什么要防用户手动构造请求呢?
猜测有以下2个原因:

  1. 页面性能不行,怕被人刷挂了

  2. 一些消耗资源的操作,比如注册用户,怕被人反复操作,比如注册了N多小号

其实,这两个问题都很好解决:

  1. 性能不行就解决性能问题,比如使用页面缓存;再不济基于IP做防刷控制

  2. 加验证码,加短信校验码

之前看一个人公众号推送了一个很有趣

http://mp.weixin.qq.com/s?__biz=MzA3NDM0ODQwMw==&mid=210665223&idx=1&sn=587b738b3dae0222f14feb509ce1b60f&scene=5&srcid=1010upLcP9NfCZkROIjmeJZl#rd

网站上有没有有效的方法可以在一定程度上防止用户手动构造传送请求而不经过浏览器?

cookie是要有的
像是laravel之类的服务端框架为了防止csrf攻击会为每位访问者生成csfr字符串,在提交表单时必须携带此串并进行验证。
参考资料:

http://laravel.com/docs/master/routing#csrf-protection

或者可以在服务端验证HTTP Referer字段

你搜索一下csrf就知道了

浏览器会自动执行js,curl执行不了,可以用js操作cookie来判断是否为浏览器。具体的验证规则可以自定义了

的确,没有办法绝对限制,只是能增加爬取得难度而已。

可以用session?

token机制

从我与各大网站斗智斗勇的经历来看,方法只有两个,一个是验证码,一个是限制IP。

token的话,浏览器之内无解。但是用爬虫,可以先get表单的页但是用爬虫,可以先get表单的页面,然后把token截取出来,用在第二次的post上面。

token + 限制来源

csrf可以做到

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn