首页 新闻 赞助 找找看

大侠们..请问你们是怎么解决ajax调用安全问题的?

0
悬赏园豆:50 [已解决问题] 解决于 2015-07-27 09:20

例如我们点击页面搜索按钮的时候,

会去执行一个ajax请求,如 api.com/Search?keyword=xxx

然后再用请求返回的数据刷新页面.

 

当然,搜索之类的API安全问题到不严重,

但涉及到充值,退款之类的和现金交易有关的功能时,安全问题就非常重要了.

先不说api.com/Trade?type=xxx之类的安全性如何,

从攻击的角度来讲,知道具体的API地址及参数后,可以构造一些合法的参数来调用API产生一些数据干扰网站的运行..

另外..

如果..是说如果哈,假如看某网站不顺眼,可以写一个程序无限的调用上边的API,加重对方服务器的负载...当负载到一定程度时对方网站就挂了.

 

那么在用ajax调用时,如何可以隐藏请求的API地址呢,哪位大侠知道请告诉我一下???

 

我看了一下淘宝的网站,硬是找不到一个有明确地址的API,感到很疑惑,他们是怎么做到的?

比如 搜索结果中的过虑条件:

可以看到a没有href=xxx,但是点击之后数据却过虑了..

 

再看看价格过虑按钮:

同样仅仅写了一个button,没有指定click=xxx,也没有指定ID,如果说通过外部js给按钮绑定事件的话,一个页面有多个button,也没有个ID来区分...是如何绑定的?

 

排序链接也一样..根本看不到它调用了哪个API来完成排序的

按下来看看立即购买和加入购物车..

 

这些都看不到是调用了什么API....请问他们是怎么做到的?

 

后来在首页找到一个带明确API的搜索按钮...

看到它请求了s.taobao.com/search,

可是..它没有指定参数的名称,也没有看到它传参的过程..它是怎么获取输入框中的内容来传递的?搜索按钮并没有调用任何js方法

 

最后,在首页的Head内的众多js中,试着将压缩的js格式化之后,搜索一下关于绑定button之类的js,没找到绑定相关的..

这个神奇的网站是怎么做到不着痕迹的调用API的,能做到这样就是黑客想攻击也没办法...

我还在js中发现一段这样的:

它的API竟然是个htm,而且htm还可以传参?我将这个地址复制出来,在浏览器打开,是一个空白页面,没有任何源码,就连js代码也没有,那么传递过去的参数它又是怎么处理的?

 

好了,问题有点多,

感觉都可以做一个讨论贴了...

问了这么多,目的只有一个,就是如何让我们的网站更安全,先不讨论我们的网站是否有攻击价值,

编写一个高质量的网站是我们这个职业的朋友应该做的.

想知道大侠们是安全方面是怎么做的...

另外,我对淘宝的调用方式很好奇,哪位知道的朋友请告诉我一下,谢谢!

hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2015-07-24 11:02
< >
分享
最佳答案
0

隐藏地址,我觉得靠js是做不到的。

我说说我的做法吧,每次请求api都会带上一个token(放在header中),后端收到这个api的时候,第一步就是验证token,验证不过,直接拒绝。

 

对于你说的看不到api地址,只能说你没看network,还有一个请求叫ajax,api url不一定非要写在html中;

对于你所说的api地址是个html,其实不管url长啥样,关键在于后端怎么处理,不是所有的.htm地址,就代表后端一定会返回html。

收获园豆:40
幻天芒 | 高人七级 |园豆:37175 | 2015-07-24 11:08

您的意思是说,每次End_Request事件中,

给header定入一个token,同时将这个token放于当前的session中,

下次收到请求时,从当前session中取出token做比对,是这样吗?

 

设置之后会给客户端发送一个存cookies的头:

这样在首次请求时,服务器端会通知客户端设置两个ID,分别是token,sessionID.

第二次请求时,请求头中带有这两个ID,服务器通过验证,随后在EndRequest中改变token,因为服务器已经收到sessionID了,所以第二次响应头里是没有SessionID的,只有token...

第三次请求时..带上这两个ID,通过验证..改token...一直这样循环...

 

那么就算攻击者在响应头中获取到这个token了,但没有得到session,所以也会验证不通过..对吗?

(如果也获取到SessionID了,那么只存在于首次服务器响应..就是攻击者自己发的请求,自己不会获取sessionID来攻击自己对吧..

还有一种情况就是攻击者从网络中截取到了普通用户浏览器回发给服务器的sessionID和token...这种情况是会话劫持了,请问您通常是怎么处理的呢?(附加问题,呵呵)

)

hexllo | 园豆:318 (菜鸟二级) | 2015-07-24 12:00

@hexllo: 你说的做法也可以,不过对于api来说,不需要每次都去从服务器取token,只需要登录的时候获取一次token(一般token在服务端是会设置过期时长的),以后用api带上token就好。

 

对于攻击者获取token(token就是用户身份证,身份证给别人,真不好识别),说真的,我没处理过,我可以提供如下思路:判断浏览器等客户端信息,如果和登录时不一致,可以要求重新登录,这样以前的token就失效了。

幻天芒 | 园豆:37175 (高人七级) | 2015-07-24 13:51

@幻天芒: 好的,非常感谢您的认真回答,最后问一下,您知道淘宝那种点击某个按钮调用指定API是怎么做的吗?打开它的页面源码找不到什么痕迹...

hexllo | 园豆:318 (菜鸟二级) | 2015-07-25 22:40

@hexllo: 注册事件,把调用api放在js代码中不就实现了...

幻天芒 | 园豆:37175 (高人七级) | 2015-07-26 12:23
其他回答(4)
0

纠结个毛...你隐藏的再好,只要看网络请求记录不就有了.

这种东西没有任何意义

收获园豆:5
吴瑞祥 | 园豆:29449 (高人七级) | 2015-07-24 11:24
0

藏是藏不住的,用 HTTPS ,甚至可以使用客户端证书。

收获园豆:2
Launcher | 园豆:45045 (高人七级) | 2015-07-24 11:59
0

fiddler好像是可以监听到http请求的,听说还可以拦截到请求,然后修改内容

I-Can | 园豆:121 (初学一级) | 2015-07-24 16:33
0

好像大家都提到了,网络抓包问题。藏是藏不住的。最多是增加迷惑性的数据。

收获园豆:3
| 园豆:780 (小虾三级) | 2015-07-26 09:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册