84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
前端打算用 ajax 来获取数据,可是怕辛辛苦苦输入的数据,被别人通过分析 ajax 返回的数据直接移花接木盗走。
是通过验证的防止防止这种行为的发生吗?可是目前网站是不需要注册即可使用,所以应该如何防止?
谢谢。
大概就是:
前端 -> 通过 ajax 获取数据 -> 后台 -> 返回数据
如何防止别人伪造 ajax 获取数据
业精于勤,荒于嬉;行成于思,毁于随。
这么说吧,你的目的就是提供给某些人一些数据,那么不让这些人抓你的数据就违反你最初的目的 这就像 我给你十块钱,我又不想让你拿这十块钱
我之前也是在这上面纠结过,采取种种措施,最后达到的效果不过是增大抓取的难度而已 这就和客户端加密一样,无论你怎么加密混淆,前提都是建立在一个可信任的信道上的,当信道不可信时,啥都没用
你网站不需要登录,那就默认了所有内容是免费提供给所有人的,直接浏览数据和调用 API 获取数据有区别么? 就算不提供 Ajax , 从网页上直接爬走是一样的啊,骚年.
“目前网站是不需要注册即可使用,所以应该如何防止”。 “别人伪造ajax获取数据”
首先你得知道如何区分 所谓的“别人”。但看问题里并没有说明。
看楼主的需求,应该是一种内容型的网站,需求应该就是怕别人剽窃自己的内容。 做任何事情都有成本,一个安全原则是提高对方的作案成本,付出的比得到的多很多,以达到让对方放弃作案的目的。
有个比较常见的方法是,将你们的内容(数据)在后端生成带水印的图片,ajax加载。至少别人不能直接用。
如果不進行身份驗證,怎樣防範都是徒勞的。因爲想要阻止「別人」,首先得識別「別人」。
身份驗證可以不是顯式的登錄,而是 Google 式的追蹤。要做到即便換瀏覽器換 IP 清空瀏覽器緩存、cookies 照樣能識別同一用戶。
能做到這些,再限制調用數據的頻率,對可疑者強制輸入驗證碼,基本就是 Twitter、Google 這些大公司的水準了。
楼主所说的这个数据终究要在某些合法页面被显示的,所以用什么方法也不能避免被盗用。只是盗用的成本问题
我想没有好办法。如果想拿到,是肯定能拿到的。
1、前端显示页面的时候后端输出一个唯一的签名; 2、Ajax 从前端发起请求到后端获取数据时需传递效验参数,后端再效验签名 不知道这个思路能否满足你的需求(不过这个思路的签名依旧可以被获得)
简单的话可以在每个ajax请求里加个sessionID。后端根据 sessionID 判断是否返回数据。但是没有办法完全避免爬虫来抓数据。
oauth2
每次发起ajax请求的时候验证一个token (加密串)即可
这么说吧,你的目的就是提供给某些人一些数据,那么不让这些人抓你的数据就违反你最初的目的
这就像 我给你十块钱,我又不想让你拿这十块钱
我之前也是在这上面纠结过,采取种种措施,最后达到的效果不过是增大抓取的难度而已
这就和客户端加密一样,无论你怎么加密混淆,前提都是建立在一个可信任的信道上的,当信道不可信时,啥都没用
你网站不需要登录,那就默认了所有内容是免费提供给所有人的,直接浏览数据和调用 API 获取数据有区别么?
就算不提供 Ajax , 从网页上直接爬走是一样的啊,骚年.
“目前网站是不需要注册即可使用,所以应该如何防止”。
“别人伪造ajax获取数据”
首先你得知道如何区分 所谓的“别人”。但看问题里并没有说明。
看楼主的需求,应该是一种内容型的网站,需求应该就是怕别人剽窃自己的内容。
做任何事情都有成本,一个安全原则是提高对方的作案成本,付出的比得到的多很多,以达到让对方放弃作案的目的。
有个比较常见的方法是,将你们的内容(数据)在后端生成带水印的图片,ajax加载。至少别人不能直接用。
如果不進行身份驗證,怎樣防範都是徒勞的。因爲想要阻止「別人」,首先得識別「別人」。
身份驗證可以不是顯式的登錄,而是 Google 式的追蹤。要做到即便換瀏覽器換 IP 清空瀏覽器緩存、cookies 照樣能識別同一用戶。
能做到這些,再限制調用數據的頻率,對可疑者強制輸入驗證碼,基本就是 Twitter、Google 這些大公司的水準了。
楼主所说的这个数据终究要在某些合法页面被显示的,所以用什么方法也不能避免被盗用。只是盗用的成本问题
我想没有好办法。如果想拿到,是肯定能拿到的。
1、前端显示页面的时候后端输出一个唯一的签名;
2、Ajax 从前端发起请求到后端获取数据时需传递效验参数,后端再效验签名
不知道这个思路能否满足你的需求(不过这个思路的签名依旧可以被获得)
简单的话可以在每个ajax请求里加个sessionID。后端根据 sessionID 判断是否返回数据。但是没有办法完全避免爬虫来抓数据。
oauth2
每次发起ajax请求的时候验证一个token (加密串)即可