【问题标题】:Types of HTTP authentication and how to design a secure database? [closed]HTTP 身份验证的类型以及如何设计安全数据库? [关闭]
【发布时间】:2013-01-03 22:36:39
【问题描述】:

几个月前,我开发了一个 iOS(iphone) 应用程序,该应用程序允许用户创建某些类型的事件并将它们作为 XML/JSON 文件发布到 Web 服务器。然后通过他们的设备,他们能够查看来自不同用户等的事件。

构建整个事物的想法非常基本。当应用程序第一次启动时,应用程序连接到一个 URL 并要求提供一个用户 ID(每个用户都是唯一的)。然后每次用户想要发布内容时,我们使用 HTTP 基本身份验证并将用户 ID 和包含有关创建的事件的所有信息的 XML 文件作为标头发送。我从来没有在服务器端工作过,所以我不知道整个系统有多安全。

几天前我开始研究我的一个应用程序,这是相同的想法,所以我首先开始在服务器端(php)工作。在我开始之前,我想看看我以前的项目有多安全,我很震惊没有任何安全措施。只需使用一个简单的 Web 调试器(嗅探器),我就能够看到我的应用程序连接到何处以请求用户 ID,每个 xml 文件的格式如何发送到数据库以及服务器如何响应。

因此,如果有人只想用一百万个用户 ID 或一百万个事件来淹没数据库,那么创建一个 php 脚本来做到这一点将非常容易。在这种情况下,我们使用 HTTP 基本身份验证。

我现在的问题是,我应该使用什么样的身份验证,所以服务器和用户(XML)之间交换什么样的文件是不可见的,以及我如何设计注册机制以便有人无法创建一百万个 ID,一个简单的脚本。

我不想构建一个超级安全的应用程序,但它至少具有某种基本的安全性。由于我对 php 非常陌生,您可以给我一些链接来检查我应该使用哪些安全机制,甚至可以提供一些更好的教程。另外,如果您在使用哪种安全性之前开发了类似的东西,您会提出什么建议?

【问题讨论】:

  • 请删除四分之三的帖子,并坚持实际问题。
  • 整篇文章描述了我想要构建什么样的应用程序以及它应该如何工作。如果这就是你的意思,它只是以“故事”的方式写的......它是一篇 300 字的帖子,最多 3 分钟阅读......我只是想解释一下,我到底需要什么
  • 其实我错了……“美国成人阅读英文散文的平均速度似乎在每分钟 250 到 300 字左右。”如果你不是像我一样的母语人士,也许你需要 1 个半.. keller.com/articles/readingspeed.html
  • 但我把你的 300 字总结为 25 个字。FAQ 清楚地知道如何提问。
  • 提出一个好问题的一部分是让它足够短,以至于每个人都不会去“tl;dr”。

标签: php ios xml http authentication


【解决方案1】:

" 我应该使用什么样的身份验证,所以服务器和用户之间交换什么样的文件是不可见的 (XML)"

对此唯一“真正”的答案是安装ssl 证书,然后使用https 协议

【讨论】:

  • 当使用 ssl 证书和 https 协议时,我的应用程序连接的 url 是否可见?因为要获取用户 ID,我不希望有人能够看到实际的 url。当然,如果 xml 文件是加密的,我想我可以发送一个特定形式的 xml 来询问用户 id,所以它应该是安全的,因为没有它你不会得到 id
  • 是的,成功了。 @donparalias,你自己说的。您可以以纯文本形式看到这一切,这就是 HTTP Basic Auth 的本质,它是纯文本形式。如果没有稍后的安全套接字 (SSL) 连接,它是不安全的。即使这样也不是灵丹妙药,因为如果他们看到握手,您仍然有可能发送MitM Attack。问你自己,How Secure is SSL。没有灵丹妙药,记住Defense in depth
  • 对客户端应用程序进行逆向工程的人可以看到该 url。嗅探器只能看到接收者的 IP 地址。
  • @Oswald,SSL 证书不需要专用 IP 地址吗?此外,进行反向查找并找出与该 IP 地址关联的域与 fairly quick Google search 非常简单。
  • @Mark,SSL 证书需要一个专用的“通用名称”,IP 地址通常不是证书的一部分。此外,对 IP 地址的反向查找会产生 一个 主机名称,不一定是在 URL 中使用的名称,当然也不是 URL 本身。
【解决方案2】:

仅通过使用一个简单的网络调试器(嗅探器),我就能够看到我的应用程序连接到何处以请求用户 ID,每个 xml 文件的格式如何发送到数据库以及服务器如何响应。

使用 SSL 防止中间人攻击。

因此,如果有人只是想用一百万个用户 ID 或一百万个事件来淹没数据库,那么创建一个 php 脚本来做到这一点将非常容易。

这就是网络通信的本质。使用启发式方法来限制不需要的数据量。一些例子:

  1. 单个 user_id 每秒最多可以创建一个事件。
  2. 让客户端对 user_id 的请求进行签名,并在服务器上验证签名。

这些不是防止滥用的万无一失的方法,但没有绝对的安全性。不过,建议的方法将阻止大多数脚本小子。

【讨论】:

  • 我不明白你在2上的意思。让客户端对user_id的请求进行签名并在服务器上验证签名。 ?
  • Wikipedia: Digital signature。对于应该通过浏览器访问的网络服务,这通常不是一个选项,但如果您提供指定的客户端(例如智能手机应用程序),则可以使用此选项。
  • @Oswald 如果他盲目信任任何 SSL 证书,它不会阻止任何中间人攻击。
  • 理解和部署看起来有点复杂,我认为我不需要那种级别的安全性,但感谢您向我解释。那么我的应用程序也将被浏览器访问。
  • 我需要一个专门的服务器来支持 http over ssl 吗?
猜你喜欢
  • 2011-11-28
  • 2016-12-29
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 2011-05-25
相关资源
最近更新 更多