管理员/员工面板的简单实现?

时间:2010-05-04 05:01:48

标签: php security

新项目需要一个简单的面板(页面)给管理员和员工:

  • 最好不要使用SSL或任何数字ceritification东西,只需通过http登录即可。
  • 具有基本身份验证,只允许管理员以管理员身份登录,并且任何员工都可以在“员工”组中登录。理想情况下,“凭证(用户名 - 哈希密码对)”将存储在MySQL中。
  • 如果有包,
  • 很容易配置,或者策略很容易编码。
  • 某处(PHP会话?)以某种方式(在每个页面的开头包含一个脚本来检查用户组,然后再做任何事情?),它会检测到任何无效的用户尝试访问受保护的页面并将他/她重定向到登录表单
  • 虽然仍然保持高质量的安全性,但我最担心的事情。

坦率地说,我对互联网安全知之甚少,以及现代CMS如WordPress / Joomla如何处理这个问题。

我脑子里只有一件事:我需要使用salt来密码密码(SHA1?),以确保任何通过网络获取用户名和密码对的黑客都无法使用它来登录系统。这就是客户想要确保的。

但我真的不知道从哪里开始,有什么想法?

3 个答案:

答案 0 :(得分:2)

使用HTTPS是绝对必要的,必须在会话的整个生命周期中使用。请记住,会话ID用于验证浏览器,如果攻击者可以获取一个(嗅探或xss),那么他不需要用户名/密码。这是由OWASP 2010年前十大A3 Broken Authentication and Session Management制定的。如果要实现安全会话,则必须阅读该链接。

md4,md5 sh0和sha1都是破碎的消息摘要功能,永远不能用于密码。 sha-2系列的任何成员都是不错的选择,sha256非常大,是密码的绝佳选择。

您应该绝对不会在网络上传输密码哈希或将其泄露给用户/攻击者。如果您要向服务器发送哈希值以进行身份​​验证,那么您已在系统中引入了非常严重的漏洞。使用sql注入可以从数据库中获取密码哈希,然后可以简单地重放此哈希进行身份验证,绕过破解密码哈希的需要。这就像您以明文形式存储密码一样。

使用$ _SESSION superglobal和session_start()来维护会话状态,永远不会重新发明风团。默认的PHP会话处理程序是安全的,可以满足您的需要。

session_start();
if(!$_SESSION['logged_in']){
   die("Authentication required!");
}

还要确保在您的系统中实施CSRF保护。使用CSRF,攻击者可以通过强制您的浏览器发送请求来访问管理面板。确保测试您的应用程序是否为XSS这是一个很好的免费xss scanner,xss可以用于通过使用XHR或获取document.cookie的值来劫持经过身份验证的会话。测试SQL注入和其他漏洞也是一个好主意,wapiti可以解决这个问题。

答案 1 :(得分:1)

不使用SSL会在整个系统中留下相当大的漏洞,因为它很容易嗅到网络流量

答案 2 :(得分:0)

这已经在SO上进行了很多讨论,这里有一些有用的链接: