首页 > 借助浏览器调试工具可以任意发送 Ajax 请求向服务器疯狂写入数据, 是否视为漏洞?

借助浏览器调试工具可以任意发送 Ajax 请求向服务器疯狂写入数据, 是否视为漏洞?

在想跨域 API 方面的问题, 比如 HTML 以静态文件方式存储, 仅仅通过 API 和服务器交换数据. 如果还是放在另一个域名上, 那么本地就可以通过绑定 /etc/hosts 来跑本地代码..

进一步, 就算不是跨域, 本地直接从调试工具大范围修改 JS, 只要知道 API, 也容易跑的.. 而且比如循环插入大量数据这种事情... 算不算个漏洞?


楼主所说的其实是个伪命题

浏览器的请求操作都可以通过程序后台来模拟,而且也没有浏览器的安全限制。所以相对浏览器,楼主更加应该担忧这个。

之所以说是个伪命题就是:如果真的要单机DOS,靠浏览器是不靠谱的。ajax请求多了在服务器还没挂之前,浏览器自己已经扛不住了(CPU、内存等)。

楼主不妨自己动手试试,让浏览器在20秒内完成10万个请求,并保证每个请求正确处理。


  1. 跨域限制限制的是网页的操作(不允许网站未经授权以用户的名义访问第三方网站)。你都直接修改用户系统了跨域限制哪里还管得着。
  2. 服务器总是要应对通过脚本大量提交请求的问题的。

可以参考discuz的表单里,有个串是用来防止重复提交的。比如你在服务器端生成一个时间相关的串,比如这样 以php为例:

$time = time();
$code = $time . '_' . md5( $time . 'yourSalt');

这个code返给表单,ajax提交是一起提交上来,第一步就检查这个code是否合法,不合法自然抛弃这个请求。 收到请求时:

$code = $_GET['code'];
list($time, $encode) = explode('_', $code);
if($encode != md5( $time . 'yourSalt' ))
{
    echo '非法请求';
    exit();
}

@掳人贾 这个用的是签名原理,问题是这个方案中没有办法对使用次数限制,您贴的代码里面也没有对时间的有效期进行限制,也就是说这个串是万能的,那我可以每次请求都加上这个好了。。

之前见过另外一种类似的方式:生成一个随机字符(比如:uuid),同时把它存储在session中,在使用一次后从session中销毁。这种方案还是没多大用,因为对方完全可以写个脚本先拿到这个数字然后再发送请求,无非是多了一个步骤而已。

lz说的这种程序属于机器人程序,广泛用于刷广告灌水以及针对投票类程序写的刷票机,写这种程序完全可以跳出浏览器,ajax限制太多,java/c#/nodejs什么的几乎所有语言、平台都有这种api可以用于模拟一个请求达到这个目的,因为就一个http请求而已,所以跨域什么的客户端防御完全无效,抓些肉鸡写个分布式程序跑也毫无压力。

如果要防范只能从服务端入手,针对其特征进行识别并屏蔽。 一般的策略是限制每ip地址在一段时间内的请求次数,设定一个阀值,超出后要么上验证码,要么直接拒绝请求。

之前在sf看到有介绍说nginx iptables来实现的,具体什么记不清了,lz可以搜下这些个关键词,大概原理就是根据访问日志统计出访问频繁的IP地址,把这个IP加入黑名单一段时间。其他平台如windows+iis的也可以参考原理自己写或者找找看……

微博和qq空间貌似也是有这种拦截的,但是拦截后并不是直接拒了,而是让你输验证码,输对了才行,体验上会相对好点。

另外提醒lz不要把搜索引擎的蜘蛛给误杀了。。。。

over


没有限制当然算

【热门文章】
【热门文章】