网站安全防护遵循木桶原理,这一观点在安全界得到一致认同,因此,整个应用的安全状态不取决于某个业务点或功能点,需要从根本上解决安全问题。公司安全防护包括两个方面:横向改进战略和纵向深入战略。横行精化策略的精髓在于坚持能杀一人是一条原则,依靠规则量来填补空隙,规则做得越细,拦住的攻击越多。这种方法提高了黑客的攻击成本,但缺点是同样提高了防御成本,需要更多的投入。但纵深防御策略是在上一层防御策略失效的情况下所设计的内网防御策略。这些安全原则不仅适用于企业的整体安全建设,也适用于每一个应用程序的设计。
这一章将介绍横向细化与深度策略的具体实施方法和典型案例,如为防止暴力破解行为而设计的后台登录接口加手机短信验证、加验证码、加限制密码错误次数等。而且当攻击者通过其他方法获得了内网访问权限时,此时登录也需要设置手机短信验证码来验证登录权限等方法。使用者密码安全政策。口令是用户登录的重要凭证,尤其是管理员帐号的口令安全更为敏感,按理来说,出现异常的帐号是不能将责任完全推给用户的,应用程序在设计时应考虑口令安全策略。为解决密码安全问题,单从密码策略的角度出发,应遵循以下原则:必须使用超过10位“大小写字母+数字+特殊字符”的组合作为密码。禁用123456和1qaz2wsx等弱密码。禁用相同或有更多相似的用户名和密码。
前台用户分离
前端用户是指没有登入后台权限的普通用户,这类用户不需要操作后台数据,而后台用户即管理员用户拥有后台登入权限,并可以在后台配置应用,从逻辑上讲,两个账户级别并不在同一操作级别,完全不必将账户放在同一个数据库表中,因为当同一表出现时,可能会出现越权修改管理员信息的情况,如密码、找回密码的邮箱等。
后台地址隐藏
几乎每一次渗透测试都会对网站目录进行枚举,查看是否有敏感文件和后台地址泄漏,这类工具书有很多,其中御剑是一个用户量很大的工具,只需在任务列表栏内点击添加按钮,输入HTTP访问地址后,再点击“开始扫描”就可以对网站进行目录探测。一旦发现后台地址,就会对后台进行暴力破解等操作,甚至会利用社会工程学的方法去想办法得到管理员的密码,相对而言,如果我们连后台地址都不让攻击者找到,那么这些攻击手段就用不上了,所以后台目录就不能固定,应该由用户登陆后台页面后自定义设置,或者直接修改后台文件夹,为了提高安全性,还应该立即提醒管理员修改后台地址,比如DedeCMS就一直在后台标红显示。
口令加密存储方式
通过社工库交易论坛,目前每天都有许多网站被拖入库中,其中不乏行业影响力排名靠前的企业网站,共有超过十亿的数据库公开。根据统计分析,泄露的数据有30%没有加密,超过60%使用哈希算法来存储,由于普通用户的密码一般不会很复杂,90%以上的用户密码都能轻易被解密,而且60%以上的用户使用MD5和sha1这两种哈希算法来存储,有多个网站专门提供密码破解服务,比如cmd5,xmd5等,而cmd5更是号称破解成功率高达95%,既然用户自己不会设置高强度的密码,那么服务商就应该想办法解决这个问题,首先是采用高强度的安全环境来保存,数据仍然是MD5这样的算法来保存,但是谁也不能保证100%安全,这样的做法似乎有点鸡肋,另外一种做法是,给密码加上一个极其复杂的固定字符串,再用MD5或sha1算法来保存,这样通过枚举方法来保存就比较困难,例如:
<?php
$password=$_POST[password];
$safestr="0123456789abcdefghijklmnopqrstuvwxyz~!@#_%&&*()_+}{.|;";
$salt=";
($i=0;$i<6;$i++)
{
$salt.=$safestr[rand(54)];
}
(a)$password=md5(md5($password.'*5t42g^_^$FFSD').$salt);$password;?>。
把产生的salt放入数据库,在后期的验证过程中把salt取出,重新使用MD5操作,对比一下结果,就能知道密码是否正确。
登陆限制
根据纵深防御的思想,假定前面提到的后台地址被偷了,假设密码被社会工程等手段偷了,这种情况下我们就要考虑在登录层设置障碍,即使攻击者拿到密码也不能登录,要达到这个效果该怎么办,做信誉系统?好的和坏的自动识别?这是一种很有效的方法,但它的实现过于庞大,一般的公司都没有这样的数据基础,所以下面展示了使用代码来简单实现最简单的策略。
注册IP限制。只有固定IP接入,或企业内部网络接入,在外部网络需要接入时拨VPN。双重要素认证对IPIP进行限制是相对安全的,但这还不够安全,因为攻击者很有可能已经通过其他途径进入IP网络,因此需要使用双因素认证手段,如手机验证码、动态令牌等,这是我们在渗透测试时经常遇到的情况:在获得密码后需要双因素认证才能登录。