使服务器文件名不明确是否有助于安全


Does making server file names ambiguous help security?

我正在开发一个系统,该系统的服务器调用文件名不明确(对于移动应用程序)。例如,如果我有一个用户注册调用,可以从r.php或df.php(随机)调用该文件。逻辑(当系统最初构建时)是,这将有助于防止人们猜测文件名和滥用服务器调用。

这真的有用吗?所有人需要做的就是启动数据包跟踪或使用反编译器来找出调用了什么HTTP请求。(实际上,任何想滥用HTTP请求的人都知道如何使用其中一个或两个"技巧")

最重要的是,随着文件名的不断增长,保持所有文件名的有序性变得很痛苦。

将我们的注册文件简单地设置为registration.php或newUser.php是否是一种糟糕的做法?

缩写为no。默默无闻的安全不是安全[1]。

首先,文件名与揭示请求URI几乎没有关系,纯文本中对客户端UA始终可见。因此,这里不需要数据包跟踪或"反编译器"来揭示HTTP上的请求/响应数据。

其次,当你考虑到你想在登录系统中防止的实际滥用类型(,即暴力攻击、自动注册等…)时,没有一种可以通过随机化端点URI来防止,因为它最终必须在一天结束时对客户端可见。无论你是否试图直接从他们那里掩盖它,你都没有好处。主要是因为你会成功躲避的人不是你害怕攻击你的人(,也就是说,不是那些实际上会对你的系统造成任何伤害的人)。所以你这样做并没有取得任何成就。

相反,您想要的是可测量的秘密(在安全工程实践中,秘密与模糊性有着巨大的区别),无论系统的实现情况如何,这些秘密都可以阻碍或防止对系统的篡改[2]。

举个例子,一个速率受限的登录系统。通过限制登录到特定用户帐户或特定IP/范围的次数,您可以有效地阻止暴力攻击,甚至阻止攻击者尝试。事实上,他们知道这个速率限制的存在并不一定能让他们进一步绕过你的安全,因为速率限制仍然在你的系统的完全控制之下。然而,通过隐藏端点URI,他们所需要做的就是检查HTTP请求/响应标头以找到该URI,而您仍然没有防御能力。


[1]https://en.wikipedia.org/wiki/Security_through_obscurity

[2]https://security.stackexchange.com/questions/44094/isnt-all-security-through-obscurity