javascript – REST – 如何限制未授权客户端软件的访问

这里是挑战:

服务/业务层具有REST(JSON)接口.
有两种可以称为API的客户端:在浏览器和移动应用(Android)中运行的webapp).他们都是公开的.使用授权(!)webapp或授权(!)移动应用程序的所有人都应该可以访问资源.应禁止所有未经授权的客户端(例如脚本).

注意:没有限制多少或哪些用户可以访问服务层 – >客户端公钥证书可能无法使用.只有客户端软件必须被授权.

在我看来,唯一的一个解决方案是“晦涩”.

思路:

>从浏览器(或应用程序)中执行的服务器加载一个随机JS函数(让我们称之为“挑战”),以特定的方式(浏览器缺陷?)指纹浏览器,计算结果并发送每个REST API调用结果.

你有什么进一步的想法或建议吗?

谢谢你提前&对不起,我的英语不好

编辑:

我的问题与用户身份验证和/或授权无关,但客户端软件验证授权无关.

我的问题的背景是,我自己的应用程序(android web)有一个RESTful后端,我不希望有人创建自己的客户端软件.原因是因为它是一个商业网站/应用程序,它提供了一些相当昂贵的数据收集.我想推广该网站和移动应用程序,而不是RESTapi(或一些第三方竞争对手).

解决方法

不幸的是,我的回答是,你永远不要相信客户端应用程序.

虽然有各种方式与您分发的客户端建立信任关系,但所有这些都可能被黑客入侵,破解或绕过.不要信任来自服务器外部的任何数据.永远.不要依赖连接来自您的客户端或主要的网络浏览器.一切都可以用足够的时间和精力来欺骗.

像行业这样的一些很好的例子很容易从游戏这样的事情中看出,即使是通过例行程序来检查内存黑客和其他方法,最终甚至像“魔兽世界”这样庞大的预算的服务通常都会看到客户端的黑客出现或者是能够发送正常客户端命令的直接客户端仿真器不会.依靠您的客户端软件保持安全,只有将正确的数据发送到您的服务器才是灾难的秘诀.如果是重要的,总是验证服务器端.始终正确地逃脱/参数化数据.使用白名单模型,最好在适当的情况下使用基于用户输入而不是用户数据本身的符号表查找.客户端验证只能被视为帮助用户,而不是安全的.

如果你只是“做得足够好”,那么你可能会有一些选择来帮助减少看到这种情况的可能性,比如你提出的晦涩的解决方案的安全性,但是即使如此,你也不应该依靠它.

一个解决方案是基本上不包括客户端的客户端的主要功能,而是在运行时将其从服务器(javascript / etc)发送,每次将逻辑包发送到客户端时都有不同的指纹,可能与一系列不同的逻辑例程,随机挑选一个.然后,您可以暂停包,跟踪哪个用户访问哪个包,并将包返回遥测器,您也可以使用它来帮助维护安全性.返回的逻辑与使用指纹发送的逻辑之间的任何不匹配都可以立即被假定为欺骗或黑客尝试.然而,最终,所有这一切仍然可以被打败(一个比较简单的例子,这样可以被某人确定的相当容易地打败,特别是如果你没有运行时内存安全).

有一些方法来处理中间人(MITM)的攻击,其中有人试图拦截数据,但是他们都不能完全考虑到受影响的端点.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)