- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我觉得将来自移动/Web应用程序的每个https请求中的用户名和密码发送给后端api是一个坏主意,但是我不能为为什么提供太多好的论据。
在服务器中,我们将密码的哈希存储在用户记录中。无论如何,对于每个请求,我们都需要从数据库中加载该用户记录,例如,检查用户是否仅被列入黑名单。由于我们需要在每个请求上加载用户记录,因此比较密码无需花费任何成本,因此无需管理另一个SessionID或 token 数据库。
另外,由于密码是通过https连接发送的,因此中间的人无法捕捉到它们。即使中间有人可以做到这一点,那么当用户需要首次登录时,他也可能也可以做到这一点(因为无论如何,他都需要在开始时发送密码)。
那么,做什么的好方法呢?
最佳答案
这将是一个很大的安全性面试问题,因为它很好地衡量了安全领域中的理解水平。
建议不要在每个请求中发送用户名/密码,但是其他答案甚至都没有涉及到真正的原因。
从技术上讲,用户名/密码的与apit之类的几乎相同,在有效期内它们是等效的。从某种意义上说,API key 甚至更糟,因为根据实现的不同,您通常会将API key 以明文形式存储在数据库中,而不是使用适当的哈希密码(附带说明,但哈希时请使用bcrypt或pbkdf2之类的东西)。完全正确,在每次请求时都可以使用与API key 相同的方式发送密码,也可以以相同的方式撤消密码,等等。API key 是密码。在这方面绝对没有区别。
但是,在大多数情况下,至少出于以下原因,您仍然可能不应该这样做。
如果由用户选择,则密码为弱。如果您有许多用户,则许多用户将拥有123456之类的密码。容易猜出其中的一些。您无需在API应用程序中运行此风险,但是,在下一个请求中,在每个请求中发送该风险或仅勉强修改此风险都可以,但是这样做确实有点。
有时SSL/TLS有一些弱点。 确实确实会不时地公开一种针对TLS的新攻击,然后最终对其进行修补。但是,在一段时间内,攻击者可能会从加密流中推断出比特,如果部分了解加密内容(即通用密码),则可能会变得更加容易。机会不是很高,但是问题是,有了许多TLS密码套件,攻击者可以立即记录流量,并在以后进行解密(因为它花费的时间很长,或者该方法尚未发明)。如果他只解密已经使用三年的API key ,那很好,但是如果它是用户密码...不太好。
服务器漏洞也可能是一个问题。前一段时间,openssl实现中存在一个漏洞,您实际上可以读取服务器内存的一部分(Web服务器进程)。如果网络服务器一直都收到用户密码,那么它可能会多次出现在内存中。如果这只是一个临时API key (或 session ID或其他内容),那么对于攻击者来说值(value)不大。它仍然很好,但至少不是密码。
内部攻击者也要考虑。如果服务器上已有攻击者,则攻击者可能无法访问数据库以直接读取/修改凭据,但可以在有限的时间内观察Web服务器进程。与上述相同,如果他只能观察临时ID而不是实际密码,那就更好了。
如果要随每个请求发送密码,则需要将密码存储在客户端上。在客户端上存储敏感内容通常不是一个好主意,这为攻击者提供了可能性。通常最好的做法是,用户输入凭据,接收一个临时 token ,然后客户端忘记实际的密码,直到 token 过期,并且用户必须再次提供密码。从用户体验的角度来看,这当然可以接受也可以不接受-但是安全性始终是一个平衡。 :)
因此,您可以看到,在每个请求中发送用户名/密码不是直接的漏洞。实际上,它甚至在许多情况下都是可以接受的。但是您可以使用临时凭证来使其更安全,如果成本合理,为什么不这样做呢?
关于api - 从移动/网络应用向后端api发送每个请求的用户名和密码是否是个坏主意,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48305695/
什么是 Web 服务(Rmi、ejb、soap)? Web服务和Web应用程序有什么区别?是否可以在 Web 应用程序中实现 Web 服务? 最佳答案 Web 服务是一种传输/公开信息的方式,使得可以
典型的 J2ee web 应用程序或任何基于 java 构建的 web 应用程序是多线程应用程序,所以每次我编写一些代码时我都必须牢记竞争条件或并发修改? 最佳答案 Is a typical J2ee
我正在将 google 登录集成到我的网络应用程序中。我按照 here 的说明进行操作。但我无法从登录中获取任何用户信息。不过,登录按钮工作得很好。 我使用这些 JavaScript 函数: i
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
是否有通用 cookie 或其他方式可以检查用户是否登录到谷歌应用程序。然后,如果是这样,我想运行一些 js。如果我知道通常在 Google 应用程序/服务中使用的 cookie 的名称,我就可以读取
我正在尝试以 Web 应用程序样式展示我的记事卡。我不担心缓存或让它离线工作。 我只想让它在 iOS 浏览器中呈现良好。这是链接:http://kaninepete.com/flashcard/rev
我正在使用 bootstrap 制作响应式网络应用。 我开始在我的网站上使用导航栏和表单进行一些测试,问题是 android 中的导航栏,因为它以全宽度呈现(如桌面 View ),而 chrome(对
我正在尝试使用 http://zxing.appspot.com/scan从 WebApp 调用 Barcode Scanner,但我无法让它工作。即使在不必要地更新和重新安装之后,它所做的只是显示默
在 WebStorm 中运行 Dart Web 应用程序时,?底部的 Pane 报告以下内容(--port 因运行而异): /home/tom/dart-sdk/bin/pub serve web -
由于某些原因,我的网络应用程序的路径似乎有问题。 我在 Eclipse 中的 WEB-INF 路径如下: Project --src -- main --webapp
Apps 脚本最近已将 StackDriver 日志移至 Apps Script dashboard ,“执行”页面。 问题是,日志不会显示在 Apps 脚本 Web 应用程序的仪表板中。当我向 Ap
身份验证后,我将用户权限标识符放入用户 session 中。如何根据用户权限限制对网站某些部分的访问。现在我正在检查页面处理程序中的权限,但如何改进? 是否有任何现有的模板可以做到这一点?能举个例子吗
我打算用 GUI 前端编写一个网络应用程序,大概使用 GTK。 我对 GTK(以及一般的 GUI 编程)完全陌生。我目前的猜测是使用两个线程,一个处理网络,另一个运行 GTK 前端。 这是解决此类问题
我一直在办公室工作,我们有一些数据需要处理几次。我的意思是数百行,有时每行中有非常大的文本 block 。为我们的客户说出食谱,其中包含 ID、名称、类别、食谱本身、时间…… 问题是我们需要经常处理和
当谈到使用官方 web SDK 的 Firestore 缓存时,它是否优化了读取以便仅当文档在上次读取后发生更改时才向服务器“发送”读取请求? (因此每次尝试不会生成 1 次额外的文档读取) 为了详细
我开发了一个使用 Jquery 移动框架的移动网络应用程序...我的主页我添加了一个 div,其中包含一些关于谁浏览我的网站 android 设备的说明... Some instructi
我就是这么想的,不知道是不是我 react 慢了。 通常,我将正在编辑的项目的 ID 存储在隐藏字段中。然后在后端(顺便说一句,我正在使用 PHP/Zend Framework),我用它来确定要编辑的
我有一些应用创意想免费发布(带广告)。我是一名 Web 开发人员,目前不想学习 Java/Objective C。我可以轻松地将想法构建到 HTML 5 在线应用程序中。 有什么原因我不能使用 Pho
我正在编写一个网络套接字应用程序,我打算使用 Azure 网络应用程序将其托管在云上。 Web 套接字是使用相当标准的 Owin 中间件实现的,并且在前 100 秒内功能齐全。这段时间之后,webso
是否有任何协议(protocol)可用于在(现在可下载的)谷歌地图中打开地址?这不是 native 应用程序,只是 Safari 的网络应用程序/网站(网络剪辑)。 Google 是否提供任何此类协议
我是一名优秀的程序员,十分优秀!