防止接口被人恶意调用接口的几种方式,有哪些可靠地方式

在前后台数据交互的时候,通过使用给Json添加token验证的方式来保证自己的接口不会被其他人调用并通过在返回字符串中添加token信息和时间戳的方式来保证接口的安全.
token是存放在服务器中的一个以 & K, V & 形式存放的字符串,在用户登录成功后,后台通过以唯一Id为基础(如userId)自动生成随机数的方式生成一个key(如RedisTokenManager.createToken(user.getId()))存放到K中,V则是存放了后台唯一字符串(当前为userId),这样后台就自动生成了一个Token对象,登录成功后每次数据验证都把Token对象放进去以进行校验,此时,还要对token对象进行设置超时时间,当一段时间客户端无响应的时候,服务器会自动清除服务器的token对象,让用户重新登录.
对于前台数据验证:
在前台传到后台数据的时候,除了添加用户名和密码等数据外,还要将token和Timestamp信息也传入到json中一起传到后台,以便于后台信息的校验.
如何保证信息不被泄露:
在传输的过程中通过对数据进行加密验证 , 生成唯一的sign值,当任何人非法修改传递的参数的时候都会导致sign值不匹配从而造成验证失败.因为sign值是MD5加密而且是唯一的,参数修改会导致验证不通过.
1.sign的生成方式:
将传入数据按照某种规则排序,如按照字母顺序排序,然后全部转成大写,我们在做移动端校验的时候会有一个和服务器端相同的密匙,有这两个数据后将密匙添加到转换后的数据前面,然后再对数据进行MD5加密,这样就生成了一个token对象.
2.Timestamp类:
就是将当前的时间传到后台,用来验证数据是否超时,防止数据被盗取,这个是请求超时时间,防止被其他用户获取到地址并进行其他操作.
举例:想要传入如下数据:
我们的密匙是“@#¥213345RTRDG&&”
① 先对传入数据排序:a=entrr&b=123&token=wdeeskfh2376428&timestap=6
② 对数据大写转换A=ENTRR&B=123&TIMESTAP=6&TOKEN=WDEESKFH2376428&TIMESTAP=6
③ 将密匙添加到转换成大写的字符串前方:@#¥213345RTRDG&&A=ENTRR&B=123&TOKEN=WDEESKFH2376428&TIMESTAP=6&TIMESTAP=6
④ 进行MD5加密生成sign.将sign放入json中,让后台首先对sign验证.
后台验证流程:
判断返回参数是否有token,Timestamp,sign 这些参数,如果没有直接返回错误.
判断此URL是否过期,如果过期返回错误.
把除了sign的参数进行排序并大写,然后把秘钥拼接再排序之后的请求参数之前进行MD5和传过来的sign值进行比对 如果不一致返回错误.
根据token 取出来userID,如果取不到,说明token 过期,返回数据,让用户重新登录.
如果验证通过,则表示返回的数据是安全的,继续进行下一步操作.
阅读(...) 评论()如何防止验证码接口被恶意攻击 - CSDN博客
如何防止验证码接口被恶意攻击
关键词:短信轰炸机
短信接口验证码是网站、App校验用户手机号码真实性的首要途径,在为网站及APP提供便利的同时,手机短信验证功能也会被部分用户和短信轰炸机进行恶意利用。如何才能防止被恶意点击呢?如果您是我们的客户,请仔细阅读。
容易被攻击的接口:注册时用户输入号码就可直接触发短信!最容易被短信轰炸机利用,只要网站被搜索引擎收录,短信轰炸机就很容易检索到注册页面。
推荐的以下几种对接方式:
1. 【绑定图型校验码】——将图形校验码和手机验证码进行绑定,当用户输入手机号码以后,需要输入图形校验码才可以触发短信,这样能比较有效的防止软件恶意点击。现在大型网站都采用此方式。
2.【流程限定】——将手机短信验证和用户名注册分成两个步骤,用户在注册成功用户名密码后,下一步才进行手机短信验证。
3.【触发条件】——用户必须填写好所有注册信息才可进行触发,注册资料不完整无法发送验证码。
附加对接设置:
4. 【短信发送间隔设置】——设置同一号码重复发送的时间间隔,一般设置为60-120秒;
5. 【IP限定】——设置每个IP每天的最大发送量;
6. 【发送量限定】——设置每个手机号码每天的最大发送量;
目前我们推荐的是第1、2、3结合456的方法进行对接接口。以免短信造成不必要的浪费!
温馨提示:请合作的客户做好注册页面安全工作,如出现被短信轰炸机利用问题请及时配合处理好注册安全问题。如果新客户没有更好的对接方法,请按我们所提供的方法进行对接处理,防止后期出现被攻击问题。
PS:请在验证码内容最后加上退订操作,如:回复TD拒收;退订回复TD等相关内容。当非用户触发接收的短信,用户回复TD以后,平台将会将其列入拒发数据库,将会停止对该号码发送。
关于“”。
本文已收录于以下专栏:
相关文章推荐
昨天突然收到短信服务提供商报警,说我们的短信接口遭受攻击,收到大量短信验证码通知。登录后台管理服务,发现确实收到攻击,正常一天的发送量不会超过100条,但昨天已经突破三千,并且还在上涨;登录服务器日志...
短信API设计
短信接口验证码通常用于电商、手机APP、网上银行、社交论坛等互联网行业,通过短信验证码进行身份二次验证,确保用户身份真实有效。但是,最近有很多用户莫名收到各类注册短信、验证短信等,技术人员排查,发现是...
验证码短信接口受到恶意调用
防止恶意攻击短信验证码接口方法、短信运营商调研选型
import java.awt.AlphaC
import java.awt.C
import java.awt.F
import java.awt.Graphic...
做产品经理
最近遇到一个关于防止短信验证码被刷的产品设计问题,后来在面试一个前来应聘JAVA开发的程序员的时候,他也提到了他以前公司的系统也遭遇过这个被...
短信验证码如何防止不恶意点击被刷!短信接口验证码是网站、App校验用户手机号码真实性的首要途径,在为网站及APP提供便利的同时,手机短信验证功能也会被部分用户进行恶意使用。注:发送验证码1分钟只能点击...
短信接口验证码是网站,App,微信端校验用户手机号码真实性的首要途径,在为用户提供便利的同时,手机短信验证功能也会被部分用户进行恶意使用。恶意频繁发送短信验证码,不仅会增加公司的运营成本,增加系统负载...
这几天老大让我弄一个发送短信验证码的功能,使用的是信易通的短信平台接口,然后在Java中使用HttpClient模拟POST请求或者GET请求(看短信平台要求,一般的情况下都是POST请求),调用短信...
他的最新文章
讲师:钟钦成
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
对于前后端完全分离的网站,后端采用PHP/Java/Python向前端输出json格式的数据,而前端通过ajax向后端调用接口获取数据。这种情况下,后端的接口如果没有采取一定的保护措施是很容易被其他人恶意调用来做一些非法操作。那么,现在在这种前后端完全分离的网站架构下有哪些主流的对后端接口保护的做法?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
1)给你API的用户发放验证Key,对请求的数据内容按双方定义的规则结合Key进行编码,后端拿到请求后解码校验是否符合预期,并设置每个Key的访问频率~~内容不符合预期直接拒绝响应访问过于频繁,那么此用户在一定时间内不允许访问~~~
2)还可以发放SSH私钥/公钥的方式来保证~~~
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
用Access-Control-Allow-Origin header 和 csrf的token来控制。有的需要限制次数的还会在headers中加入X-RateLimit-Limit和X-RateLimit-Remaining来控制访问
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
目前我的想法更多是限制操作频度来控制,因为无论你怎么做,会Chrome插件开发的脚本小王子总能利用你的用户体验需求绕过所有限制。
同时也建议你开放出去的api权限控制好,比如
不要将这个api设计为随意更换id就能查询到所有用户的信息,要在filter中对传入的id和session中维护的登录用户信息做鉴权校验。
如果这个页面被设计为不需要用户登录即可查看的偏静态页面,那我会推荐你不要用方案来实现这种页面。因为很难去做SEQ和CDN化
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
给你一个简单的方案:判断请求来源是不是ajax,如果不是,则拒绝请求。那么来自ajax的请求,可以进行计数,如果单位时间请求过于频繁的话,禁止请求(这样会武断的屏蔽掉一个IP后面有一家大公司的情况)。
如果是ajax的话,你根本不能判断对方是不是恶意请求,因为它很有可能真的来源于你自己的页面。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
做个token验证。在前端要调用后端接口的时候,传个加密过的token过来就行啦
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
一般就是token,还有就是来源。。。这就杀了一片了。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
做好后端验证是最重要的。传递的数据可以用js加个密,能略微增加一些抓包的难度
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
http协议的无状态特性决定了是无法彻底避免第三方调用你的后台服务。前面几位说的方法都有一定的作用,包括crsf、接口调用频率、用户行为分析等从某一些方面来说都是只能增加第三方调用的难度而已。
12306网站就是最好的实例。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
登录数据可以用session,如果不需要登录的,可以用参数密钥时间认证。
test.php?a=1&b=2&time=&code=xxxx
xxxx就是认证码,简单点可以用md5(a1b2timepasswd),即参数列表,加上当前时间,加上密码。你可以使用多个密码,即一个客户端一个密码,每个客户端发一个appid,即增加一个参数,
`test.php?appid=1&a=1&b=2&time=&code=xxxx`,
这样可以随时修改一个客户端的密码,或者丢弃某个客户端请求。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
非法访问通常使用认证来解决,方法很多session,oauth等等。对于合法的认证访问通常需要进行访问频率和次数的限制,各种API框架都有支持,比如Django restframework的throttling。对于拒绝服务时的访问,通常需要在更前端做控制,比如在nginx上配置rate limit。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
参照各大开放接口,做一个token验证,每次发起请求必须带验证。就不会被随意调用了。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
HTTP请求支持鉴权,用base auth 做访问身份验证.或者用oauth2对请求做认证.
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
最近我也在思考这个问题
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
试试Oauth验证
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
后端没有记录session,怎么获取数据?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
后来,我大致想了一下,一些不是非常敏感的数据,不需要登录就可以加载,如果是敏感的数据需要用户登录了之后才可以用异步调用。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
验证码,session,限制ip 这些都是可以做的…
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
所见即所得,没办法。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
lz 可以参考下微信js 的接口
该答案已被忽略,原因:宜作评论而非答案
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:2015年2月 Java大版内专家分月排行榜第二2014年3月 Java大版内专家分月排行榜第二
2014年9月 Java大版内专家分月排行榜第三2014年6月 Java大版内专家分月排行榜第三2014年2月 Java大版内专家分月排行榜第三2013年11月 Java大版内专家分月排行榜第三2013年10月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 调用接口的几种方式 的文章

 

随机推荐