你见过的最糟糕的安全漏洞是什么?为了保护罪犯,限制细节可能是个好主意。

不管怎样,这里有一个关于如果你发现了安全漏洞该怎么办的问题,还有一个关于如果公司(似乎)没有回应该怎么办的问题。


当前回答

if( $session['role'] = "admin" ) //grant admin rights

只要少一个字符(“=”而不是“==”),就可以向登录的任何人授予管理权限。你是有罪的。

其他回答

按下Windows 98登录屏幕上的取消按钮,你就可以进入系统了。

有一次我有……创造性的差异……在我帮助建立的一个社区网站上,另一个编码器添加了一个新的PHP文件,该文件列出了审批队列中的文件,该文件还具有删除每个文件的链接。

不幸的是,这个脚本使用了整个通过模糊实现安全的概念。

不知何故,一个网络爬虫发现了这个页面,并跟踪了所有的删除链接。

不用说,修改元数据或删除文件的脚本现在需要登录。

附注:我与此无关,甚至不知道这个脚本的存在,直到当时的一位工作人员告诉我发生了什么。实际上,我现在又在为这个网站工作了,部分原因是为了确保这样的事情不会再发生。

一个“安全”的网站,每个页面都是加密的,但登录页面!

几年前,一位朋友给了我一把他发现的旧斧头,希望我告诉他这是一件古老的人工制品。所以,我在谷歌上搜索了一些可能有助于识别的网站,得到了一个链接到英国中部某处的博物馆网站。

只不过它把我放到的那个页面给了我整个网站的完全管理员权限。作为一个负责任的人,我更改了账户所有者的名字,这样他们就知道我不是在胡说八道,并给他们发了一封电子邮件,建议他们在更恶毒的人发现之前,把让我进入的漏洞堵上。

不用说,我收到了网站所有者的一封非常感谢的电子邮件,开发人员向他保证,错误已经被发现并修复了。尽管你不得不怀疑一个如此粗心大意的人的能力。

public class AuthenticationServlet extends HttpServlet
{
    private String userName;
    private String password;

    protected doPost(HttpServletRequest req, HttpServletResponse resp)
           throws ServletException, IOException
    {
        userName = request.getParameter("userName");
        password = request.getParameter("password");
        authenticateUser(userName,password);
        ......
    }
}

显然,正如有人在自动化负载测试中发现的那样,单例和缺乏同步会导致安全问题。