安全问题的讨论中,我们已经向大家介绍了访问控制的安全设计核心和信任关系的划分问题,本文将继续向大家介绍。
创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、网站设计、浦北网络推广、成都微信小程序、浦北网络营销、浦北企业策划、浦北品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供浦北建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
数据与代码分离的思想是安全设计的原则
最典型的体现数据与代码分离思想的是模板系统。
比如velocity,在渲染html的时候,程序员可以写vm模板,一些静态写死的内容就是代码,而通过变量,经过渲染才最终展现的内容则称之为数据。一个典型的例子如下:
-code--------------------------------------------
test
-------------------------------------------------
代码与数据如果没有分离,就会导致代码混乱,数据变成代码的一部分去执行。比较常见的例子就是PHP里的SQL写法:
- -code----------------------------------------------------
- $sql = "SELECT * FROM article WHERE articleid='".$_GET[id]."'";
- ---------------------------------------------------------
如果参数 id 中带有单引号,就会闭合掉代码中的单引号,从而导致数据变成代码执行。
所以这个注射的本质问题还是没有做好数据与代码的分离。
比较好的做法是如下java代码中的使用变量绑定,很好的做到了代码与数据分离
- -code----------------------------------------------------
- String sql="Insert into table VALUES(?,?)";
- List values = new ArrayList();
- values.add(Integer.toString(id));
- values.add(operator);
- try{
- executeStatement(sql, values);
- result=true;
- }catch(Exception e){
- e.printStackTrace();
- }
- ---------------------------------------------------------
但是并不是说使用了模板系统就一定分离了数据与代码。
因为在类似“render”或者是“transform”的过程中,往往存在一个将数据进行规范化的过程。这个过程也可能出现问题,从而导致代码可以混淆数据进行执行。
比较好的做法是,数据中不能包含有在代码中存在语义的字符。
参考如下例子:
- -code----------------------------------------------------
- Set-Cookie: name=id\r\nP3P: xxxxxxxxxxxxxx\r\n
- ---------------------------------------------------------
红字部分是用户的输入。
在HTTP的标准中,冒号“:”,等号“=”,换行符CRLF“\r\n”,百分号“%”等字符都是有具体的语义的,属于代码部分。所以正常的用户数据中不应该包含有这些字符。
如果出于需求一定要包含怎么办?按照标准将这些字符全部encode。
在HTTP标准中可以使用urlencode,比如等号就变成了“%3d”。
这样就做到了代码与数据的分离。
代码与数据分离原则的本质还是体现了安全问题是信任问题这一思想。
代码是否应该信任数据,或者说代码应该信任怎样的数据,是这个原则的本质。
在应用中,比较好的例子是json、XSLT,这些方法都比较好的做到了数据与代码分离,所以在开发中多使用这些比较好的方法,无形中就提高了安全性。
最佳实践一:Secure By Default
经常可以看到一些权威文档上推荐使用“default denied”,这就是“Secure By Default”
的一种体现。
“Secure By Default”可以说是一个最佳实践。在很多时候,这个思想应该上升到战略的高度。只有真正做到“Secure By Default”,才能保证网站的安全。
因为随着时间的推移和系统的发展、膨胀,会变得越来越臃肿。一个大系统发展到后期,基本上没有一个人能了解系统的全部,而变化却每天都在发生。所以,在这种情况下,只有使用“Secure By Default”的思想来制定安全方案。
白名单往往是实现“Secure By Default”的方法。与黑名单不同,白名单的思想很好的体现了“default denied”。下面以XSS的防御问题举例。
对于一些HTML的标签和事件,黑名单的做法是列出危险的标签和事件,然后禁止他们。
WEB安全的设计思想就像大家介绍完了,希望大家已经掌握了。
分享标题:WEB应用安全设计思想续
链接分享:http://www.shufengxianlan.com/qtweb/news14/275414.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联