如何防止模拟的http的恶意请求?

http://www.dewen.io/q/5511

我有一串URL www.abc.com?para=xxx 
在页面中点击按钮后用ajax执行此URL后,后台会执行一些操作,页面通过ajax的响应结果继续完成接下来的操作。这里是没登录的情况下,没有用户标志这种session的。 
但是如果遇到懂程序的人,如果发现了这个接口的调用方法,就可以使用一些Http模拟提交的工具来请求这个接口,从而引发系统安全问题。
我不想通过IP进行访问次数和访问时间的限制,同样不想使用验证码,这样很影响用户使用的体验。 
用HTTP_REFERER来判断HTTP来路,也不可靠,有没有什么更好的办法比较有效地阻止这种行为?

评论 (4) •   •  链接 •  2012-09-12 
  • 0
    www.abc.com?para=xxx&sign=md5(key.xxx)
    接收para变量时,
    验证sign
     –  fjyxian  2012-09-18
  • 0
    你可以增加每个url的有效期,有效期过了就不处理该请求 –  kazaff  2012-09-22
  • 1
    果断csrfToken,这是业界成熟的方案 –  kenvi  2012-09-25
  • 0
    [是不是和这个类似][1]
    [1]: http://www.oschina.net/question/12_72060
     –  明月照大江  2012-10-07
12个答案

之前写过一篇文章《CSRF: 不要低估了我的危害和攻击能力》,比较长,就不贴过来了,需要的自己过去看~

大致总结如下,总体来说,预防CSRF主要从2个方面入手,分别是:
1、正确使用GET,POST和Cookie;
2、在non-GET请求中使用Security token;

评论 (0) •  链接 • 2012-09-13

可以对请求进行限制,如果不是采用ajax方式请求的可以拒绝请求
$AJAX = ('XMLHttpRequest' == @$_SERVER['HTTP_X_REQUESTED_WITH']);
if(!$AJAX) exit;
....

评论 (1) •  链接 • 2012-09-12
  • 1
    可以通过设置header来模拟ajax请求,很多单元测试框架就可以实现模拟ajax请求 –  abbish  2012-09-14

页面载入时服务器端产生加密key,js使用key加密参数,提交到服务器,由服务器解密后运行,解密失败的无视请求。

缺点也存在,那就是加密是在js处进行的,如果被人深入依旧可以使用程序调用。

限制这种调用的最优方法就是在服务器端,不想使用session登录信息判断的话,这就很难操作。只能将js复杂化,增加他人解读难度。

我不想通过IP进行访问次数和访问时间的限制,同样不想使用验证码,这样很影响用户使用的体验。

可以使用session进行时间间隔判断,例如载入页面到提交参数时间间隔过短的,很有可能是程序自动提交,毕竟浏览器载入,渲染都是需要时间的。

评论 (0) •  链接 • 2012-09-12
  1. 我觉得不登录就能用的接口如果也能引发安全问题的话,这个属于设计问题吧……如果是Ajax登录之类的接口的话另当别论
  2. 浏览器能做的任何操作,程序都是可以模拟的。因为浏览器也是程序。因此所谓防范毫无意义。验证码之类的机制虽然可以防止全自动,但至少也可以半自动(手输验证码)。真正防范大量自动或半自动调用的方法只有按IP的访问量限制。
  3. Session是没用的。Session是靠Cookies来工作的,清掉Cookies又是一个新的Session

综上所述,有用的方法就只有你说的那两种:通过IP进行访问次数和访问时间的限制,验证码
百度贴吧之类的大型网站防范程序发帖也是用的这两种方法,如果有更好的方法他们早就用了。可以考虑把这两种合起来,没超过访问次数和访问时间限制就正常访问,否则要求验证码,这样算是一个权衡吧。

评论 (2) •  链接 • 2012-09-14
  • 0
    其实 LZ 主要想解决的是 外部调用 ajax 引发的安全问题,而不是说限制接口的次数.. –  秋叶  2012-09-19
  • 0
    @秋叶 这就是没办法。用户能进行的操作,脚本也能进行。 –  灵剑2012  2012-09-19

如果你的应用不是到处都是这种按钮的话,最好的方法还是验证码和访问限制,如果很多,那还是优化流程设计减少按钮吧

评论 (0) •  链接 • 2012-09-14

1.假如是需要登录才可以调用的接口,那么每次进行操作的时候都进行登录判断即可。
2.假如是不需要登录可以操作的接口,那么就在ajax 的url 添加上 加密( 时间 + 常量 + ip)
后端反解密,成功代表请求正常,反之失败, 接受到数据的时候再判断下 一定时间内ip 请求次数是否过多,如果是的话 一直返回失败....

评论 (0) •  链接 • 2012-09-19

要想完全安全只能走pki,那一套了。

评论 (0) •  链接 • 2012-09-21

服务端生成密钥,传递给客户端,服务端再验证

评论 (0) •  链接 • 2012-09-20
  • 社区维基

    0 票

  • 赵志新
    1

你要识别 机器与用户 只有 验证码一条路可以走了

评论 (0) •  链接 • 2012-09-19

www.abc.com?para=xxx&sign=md5(key.xxx)
接收para变量时,
验证sign

评论 (0) •  链接 • 2012-09-18

HTTP_REFERER这个你是用的什么语言,整个数据必须用javascript获得,然后传给服务器,因为除了javascript其他语言的referer都是可以伪造的,javascript的不可以伪造,当然对于javascript也是有办法的,不过这个是最准确的,百度统计等等级网站都是用的javascript判断来路

评论 (2) •  链接 • 2012-09-16
  • 0
    但是其他工具可以连javascript的头一起伪造,还是没用 –  灵剑2012  2012-09-16
  • 0
    HTTP_REFERER 完全可以模拟 –  ericlin  2012-09-24

所有的登录请求都可被模拟,看模拟人水平如何了。杀毒软件也是先有病毒后杀毒,做不到完全的安全,只能通过一些手段减少。
一、通过后台你可以清楚看到恶意点击来源,IP直接禁止
二、系统会根据您的频率设置要求,一般的模拟都是有规律的。

增加 防恶意点击阻击功能
1、不采取动作:只记录不对恶意点击访客采取阻击动作,可以正常访问网站;
2、警告并提示收藏:提醒访客将网站添加到收藏夹,下次访问就不用再点广告链接进入网站(警告内容及收藏可以在全局参数设置中定义);
3、网站跳转:拒绝访客访问,直接转向用户自定义的网站;
4、关不掉的对话框:对方电脑弹出关不掉的对话框;
5、黑屏:对方电脑显示黑屏效果,关闭时出现关不掉的对话框;
6、弹窗死机:对方电脑不断弹出窗口,直到电脑资源耗尽瘫痪;
7、组合攻击:多种阻击联合执行
8、病毒植入:给恶意访客的电脑稙入病毒

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过在服务端实现以下几种防御措施来禁止使用Selenium模拟浏览器: 1. 检测浏览器的User-Agent字符串,如果发现是Selenium模拟的浏览器,就拒绝访问。 2. 在服务端设置验证码,并在客户端进行验证,如果验证码无法通过,就拒绝访问。 3. 在服务端设置限制访问频率,如果访问过于频繁就拒绝访问。 4. 在服务端设置限制访问次数,如果访问次数过多就拒绝访问。 请注意,这些方法并不能100%禁止使用Selenium模拟浏览器,但可以有效降低恶意使用的风险。 ### 回答2: 服务端怎么禁止别人用selenium模拟浏览器? 要禁止别人使用selenium模拟浏览器访问服务端,可以采取以下几种措施: 1. 检测用户请求的浏览器标识:服务端可以通过检查用户请求中的User-Agent字段,来判断请求是否来自真实的浏览器。Selenium模拟的浏览器通常会有特定的User-Agent信息,可以通过识别这些信息来阻止对应的请求。 2. IP过滤和限流:对于经常发起模拟浏览器请求的IP地址,可以设置IP过滤规则或者限制请求频率,对其进行限制。这样可以有效防止恶意用户不断尝试使用selenium模拟浏览器。 3. JavaScript逆向难题:为了防止通过Selenium模拟浏览器绕过前述措施,服务端可以通过在网页中嵌入一些JavaScript代码,增加一些逆向工程的难度。这些代码可以使用各种技巧来识别是否有Selenium相关的脚本在执行,然后拒绝对应的请求。 4. 动态生成页面内容:通过在服务端动态生成页面内容,将一些敏感的信息、操作或者验证逻辑隐藏在动态生成的部分中,使得使用Selenium模拟浏览器的请求无法得到所需的关键信息或无法完成必要的操作。 5. 验证码:在服务端引入验证码机制,通过要求用户进行验证才能完成某些敏感操作,防止Selenium模拟浏览器自动化元素的提交动作。 需要注意的是,鉴于技术的不断发展和出现新的绕过手段,以上措施可能无法完全避免所有的Selenium模拟浏览器访问。因此,为了确保服务端的安全性,可能需要综合多种手段进行维护和防御。 ### 回答3: 服务端可以通过一些策略来禁止别人使用Selenium模拟浏览器。以下是一些可能的方法: 1. 检测Selenium自带的特定浏览器标识:Selenium在每个请求中都会带有自己的User-Agent字符串。服务端可以检测请求的User-Agent中是否包含Selenium特有的标识,如"webdriver"、"selenium"等关键字,如果检测到这些标识,服务端可以拒绝服务或采取其他防护措施。 2. 检测非人类浏览行为:Selenium模拟的浏览器行为通常是自动化、快速、连续的,与真实用户的浏览行为有所不同。服务端可以通过监测访问频率、点击模式、鼠标移动等行为特征,来判断是否是通过Selenium模拟的浏览器,若是则拒绝服务。 3. JavaScript行为检测:Selenium自带的浏览器在执行JavaScript时通常会有一些特定的行为表现。服务端可以通过监测浏览器的JavaScript执行行为,如是否能获取到特定的DOM元素、是否出现特定的JavaScript错误等,来判断是否是使用Selenium模拟的浏览器。 4. 验证机制:引入验证码等验证机制可以有效防止大规模使用Selenium的爬虫行为。通过在关键操作页面(如登录、注册等)中引入验证码,需要用户手动输入以通过验证,这样可以阻止自动化脚本的执行。 5. 不断升级的防护措施:由于Selenium等自动化工具的不断发展和演进,服务端需要定期更新防护策略以应对新的挑战。了解最新的Selenium使用技巧和防范措施,及时采取相应的应对措施。 综上所述,服务端可以通过多种手段来禁止别人使用Selenium模拟浏览器,但无法完全阻止所有的尝试。这需要不断改进和升级的防护机制,以平衡保护网站资源和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值