欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

javascript - Ajax 如何防止数据盗用

程序员文章站 2022-04-20 22:08:27
...
前端打算用 ajax 来获取数据,可是怕辛辛苦苦输入的数据,被别人通过分析 ajax 返回的数据直接移花接木盗走。

是通过验证的防止防止这种行为的发生吗?可是目前网站是不需要注册即可使用,所以应该如何防止?

谢谢。

大概就是:

前端 -> 通过 ajax 获取数据 -> 后台 -> 返回数据

如何防止别人伪造 ajax 获取数据

回复内容:

前端打算用 ajax 来获取数据,可是怕辛辛苦苦输入的数据,被别人通过分析 ajax 返回的数据直接移花接木盗走。

是通过验证的防止防止这种行为的发生吗?可是目前网站是不需要注册即可使用,所以应该如何防止?

谢谢。

大概就是:

前端 -> 通过 ajax 获取数据 -> 后台 -> 返回数据

如何防止别人伪造 ajax 获取数据

这么说吧,你的目的就是提供给某些人一些数据,那么不让这些人抓你的数据就违反你最初的目的
这就像 我给你十块钱,我又不想让你拿这十块钱

我之前也是在这上面纠结过,采取种种措施,最后达到的效果不过是增大抓取的难度而已
这就和客户端加密一样,无论你怎么加密混淆,前提都是建立在一个可信任的信道上的,当信道不可信时,啥都没用

你网站不需要登录,那就默认了所有内容是免费提供给所有人的,直接浏览数据和调用 API 获取数据有区别么?
就算不提供 Ajax , 从网页上直接爬走是一样的啊,骚年.

“目前网站是不需要注册即可使用,所以应该如何防止”。
“别人伪造ajax获取数据”

首先你得知道如何区分 所谓的“别人”。但看问题里并没有说明。

看楼主的需求,应该是一种内容型的网站,需求应该就是怕别人剽窃自己的内容。
做任何事情都有成本,一个安全原则是提高对方的作案成本,付出的比得到的多很多,以达到让对方放弃作案的目的。

有个比较常见的方法是,将你们的内容(数据)在后端生成带水印的图片,ajax加载。至少别人不能直接用。

如果不進行身份驗證,怎樣防範都是徒勞的。因爲想要阻止「別人」,首先得識別「別人」。

身份驗證可以不是顯式的登錄,而是 Google 式的追蹤。要做到即便換瀏覽器換 IP 清空瀏覽器緩存、cookies 照樣能識別同一用戶。

能做到這些,再限制調用數據的頻率,對可疑者強制輸入驗證碼,基本就是 Twitter、Google 這些大公司的水準了。

楼主所说的这个数据终究要在某些合法页面被显示的,所以用什么方法也不能避免被盗用。只是盗用的成本问题

我想没有好办法。如果想拿到,是肯定能拿到的。

1、前端显示页面的时候后端输出一个唯一的签名;
2、Ajax 从前端发起请求到后端获取数据时需传递效验参数,后端再效验签名
不知道这个思路能否满足你的需求(不过这个思路的签名依旧可以被获得)

简单的话可以在每个ajax请求里加个sessionID。后端根据 sessionID 判断是否返回数据。但是没有办法完全避免爬虫来抓数据。

oauth2

每次发起ajax请求的时候验证一个token (加密串)即可

服务器判断referer, 如果referer的域名是自己的域名, 就返回, 不然就不返回。

Access-Control-Allow-Origin这个header就够了

网页是公开的,数据就是公开的,任何验证都是徒劳,都是可以被 robot 模仿的。

可能唯一有点作用的,就是对数据进行处理,比如小说网站就不传文字,
而是传由文字生成的图片,这是一个可以参考的例子。

服务器生成一个token(比如 md5(key+ip+date),这个规则只有管理员知道)与html一起下发给用户,然后由用户浏览器发起ajax请求,同时附加之前服务器生成的token,服务器判断来源网站域名+token正确后给用户发回数据。
之前为了防止投票作弊器,想到了这个办法。

一句话,只要是能看到的,就是可以拿到的,所以不用纠结了

這是可以徹底解決的,給大家一個思路,就是把文件放在瀏覽者的內存,至於瀏覽器緩存方面,可以利用overwrite緩存。讓盜竊者得到一個無用的文件,您還可以在文件內指出他由哪個IP取得這個文件,嚇唬他們一下,讓他們以後對偷竊沒信心。我以前在香港寫了很多程序,時而會被人偷了,所以研究了這個方法,希望大家不要把辛苦工作得來的成果讓小人們奪去。

我看到有个叫做_影xx_的,在这里骂人,佩服喔,他妈妈的辛辛苦苦凑大他,却连几行字都理解不到,大家说他懂干啥呢?

什么权限呀,许可证呀,给访问者种种难度只是排斥而已,做了前端就是想让所有人看,像_影xx_这种无能之辈都能看。这样才有趣,大家说对不对?
后端谁都不能看,这是对知识产权的保护。调用的src可以临时生成,也可以生成多次,也可以临时移除,缓存由我来控制,明白吗?在不明白就发邮件给我,我私下详细告诉你。