安全优化--秒杀接口地址的隐藏

安全优化--秒杀接口地址的隐藏

 

秒杀接口地址隐藏:每次点击秒杀按钮,才会生成秒杀地址,之前是不知道秒杀地址的。不是写死的,是从服务端获取,动态拼接而成的地址。(Http协议是明文传输,透明的,前端无法控制恶意用户进行攻击)安全校验还是要放在服务端,禁止掉这些恶意服务。

思路:

1.在进行秒杀之前,先请求一个服务端地址,/getmiaoshaPath 这个地址,用来获取秒杀地址,传参为 商品id,在服务端生成随机数(MD5)作为pathId存入缓存,(缓存过期时间60s),然后将这个随机数返回给前端.

2.获得该pathid,后 前端在用这个pathid拼接在Url上作为参数,去请求domiaosha服务

3.后端接收到这个pathid 参数,并且与 缓存中的pathid 比较。

如果通过比较,进行秒杀逻辑,如果不通过,抛出业务异常,非法请求。

 
  1. /*点击秒杀之后 就访问后端 获取一个秒杀地址pathId*/

  2. function getMiaoshaPath() {

  3. $.ajax({

  4. url :"/miaosha/getPath",

  5. type : "GET",

  6. data:{

  7. goodsId :$("#goodsId").val(),

  8. verifyCode : $("#verifyCode").val()

  9. },

  10. success:function(data){

  11. if (data.code ==0) {//

  12. var path = data.data

  13. domiaosha(path)

  14. }else {

  15. layer.msg(data.message)

  16. }

  17. },

  18. error :function () {

  19. layer.msg("客户端错误")

  20. }

  21. })

  22.  
  23. }

  24.  
  25. function domiaosha(path){

  26. $.ajax({

  27. url :"/miaosha/"+path+"/do_miaosha",//安全优化,带着这个path去访问

  28. type : "POST",

  29. data:{

  30. goodsId :$("#goodsId").val()

  31. },

  32. success:function(data){

  33. if (data.code ==0) {//成功 就跳转 订单页面 并传入 orderid

  34. // window.location.href= "/order_detail.htm?orderId="+data.data.id;

  35. //若果返回成功,即表示收到请求,等待中

  36. getMiaoshaResult($("#goodsId").val());

  37. }else {

  38. layer.msg(data.message)

  39. }

  40. },

  41. error :function () {

  42. layer.msg("客户端错误")

  43. }

  44. })

  45. }

  46.  
  47. /**

  48. * 安全优化之 ---接口地址随机化(隐藏)

  49. * 1.点击秒杀之后,先访问该接口生成一个pathId,并存入redis 返回前端

  50. * 2.前端带着这个pathId去访问秒杀接口,如果传入的path和从redis取出的不一致,就认为 非法请求

  51. */

  52. @AccessLimit(seconds = 5,maxCount = 5,needLogin = true)

  53. @RequestMapping(value = "/getPath", method = RequestMethod.GET)

  54. @ResponseBody

  55. public Result<String> getPath(HttpServletRequest request,MiaoshaUser user, Model model,

  56. @RequestParam("goodsId") long goodsId,

  57. @RequestParam(value = "verifyCode")String verifyCode) {

  58. if (user == null) {

  59. return Result.error(CodeMsg.SESSION_ERROR);

  60. }

  61.  
  62.  
  63. String str = UUIDUtill.uuid();

  64. /*随机生成 一个 pathId 返回给前端*/

  65. String pathId = Md5Util.md5(str + "1111");

  66. redisService.set(MiaoshaKey.getMiaoshaPath, "" + user.getId() + goodsId, pathId);

该操作:可以为了防止,恶意用户登陆之后,获取token的情况下,通过不断调用秒杀地址接口,来达到刷单的恶意请求。

每次的url都不一样,只有真正点击秒杀按钮,才会根据商品和用户id生成对应的秒杀接口地址。

 

但是,这种情况仍然不能解决 利用 按键精灵或者 机器人 频繁点击按钮的操作,为了降低点击按钮的次数,以及高并发下,防止多个用户在同一时间内,并发出大量请求,加入数学公式图形验证码等防高并发优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值