最近开始看吴瀚清的《白帽子讲web安全》了,照旧对于其中的一些要点作个记录。
1.白名单思想
白名单思想对应黑名单思想,对于web方案的设计,应当遵循白名单思想,举个例子来说明一下白名单和黑名单
白名单:用户登录的时候用户名密码都正确才登陆成功
黑名单:密码不正确登录失败、用户名不正确登陆失败、否则登陆成功
上面只是个简单的例子,禁用黑名单思想是因为有的时候你很难把所有失败的条件都一一列举出来,所以白名单
思想就规避了其潜在的风险。
2.最小权限原则
该原则规定只授予主体必要的权限,比如常见的文件夹权限777、755(4-读 2-写 1-运行),对于非开发用户组读写
权限就应该设为5(4+1)防止无意篡改数据。
3.数据与代码相分离
这个原则大多是用来应对因“注入”而引发安全问题的场景的。
对于用户输入的任何数据都应该进行安全处理,恶意的用户可能会在你的输入框内输入脚本,在你的查询条件里面输入
“1=1”,所以我们不能相信用户输入的任何数据!
4.不可预测性
不可预测性是指,私密数据不应该是其他用户能够随意揣测的,比如密码,你去银行办卡的时候,工作人员都会提醒你
不要和出生年月一样,否则别人就能轻易地破解你的密码了,在web设计中也应当遵循这个原则。
不可预测性的实现往往需要用到加密算法、随机数算法、哈希算法等等。
5.浏览器安全
同源策略:为了不让浏览器的页面发生混乱,浏览器提出“源”的概念,来自不同源的对象无法互相干扰。
影响“源”的因素有:host、子域名、端口、协议。
在浏览器中:通过<script>、<img>、<iframe>、<link>等标签都可以实现跨域加载资源,这些带“src”属性的标签每次加
载时,实际上是浏览器发起了一次get请求。但是针对这些跨域资源,浏览器却限制了javascript权限,使其不能读、写
返回的内容。
前端常用的ajax就受到同源策略的限制,不能跨域访问资源,但跨域请求的需求变得越来越迫切,因此,诞生了jsonp、
iframe跨域等技巧。
http://www.a.com请求http://www.b.com/test.php,很显然,这是一个跨域请求,是受到同源策略限制的,所以
a请求的时候,要在请求头加上Origin Header(Origin:http://www.a.com)
b网站接口要返回http响应头(Access-Control-Allow-Origin:*)
代码实现: header("Access-Control-Allow-Origin:*");