WEB应用安全设计思想 续

安全问题的讨论中,我们已经向大家介绍了访问控制的安全设计核心和信任关系的划分问题,本文将继续向大家介绍。

数据与代码分离的思想是安全设计的原则

最典型的体现数据与代码分离思想的是模板系统。

比如velocity,在渲染html的时候,程序员可以写vm模板,一些静态写死的内容就是代码,而通过变量,经过渲染才最终展现的内容则称之为数据。一个典型的例子如下:

  1. -code--------------------------------------------

    test
    -------------------------------------------------

代码与数据如果没有分离,就会导致代码混乱,数据变成代码的一部分去执行。比较常见的例子就是PHP里的SQL写法:

 

  1. -code----------------------------------------------------
  2. $sql = "SELECT * FROM article WHERE articleid='".$_GET[id]."'";  
  3. ---------------------------------------------------------  

 

如果参数 id 中带有单引号,就会闭合掉代码中的单引号,从而导致数据变成代码执行。
所以这个注射的本质问题还是没有做好数据与代码的分离。

比较好的做法是如下java代码中的使用变量绑定,很好的做到了代码与数据分离

  1. -code----------------------------------------------------  
  2.  
  3. String sql="Insert into table VALUES(?,?)";  
  4. List values = new ArrayList();  
  5. values.add(Integer.toString(id));  
  6. values.add(operator);  
  7. try{  
  8. executeStatement(sql, values);  
  9. result=true;  
  10. }catch(Exception e){  
  11. e.printStackTrace();  
  12. }  
  13. ---------------------------------------------------------  
  14.  

 

但是并不是说使用了模板系统就一定分离了数据与代码。

因为在类似“render”或者是“transform”的过程中,往往存在一个将数据进行规范化的过程。这个过程也可能出现问题,从而导致代码可以混淆数据进行执行。

比较好的做法是,数据中不能包含有在代码中存在语义的字符。

参考如下例子:

  1. -code----------------------------------------------------  
  2. Set-Cookie: name=id\r\nP3P: xxxxxxxxxxxxxx\r\n  
  3. --------------------------------------------------------- 

 

红字部分是用户的输入。

在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安全的设计思想就像大家介绍完了,希望大家已经掌握了。

【编辑推荐】

  1. Web云安全技术应用
  2. WEB应用安全设计思想
  3. Web安全网关采购指南 注重性能

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/143097.html<

(0)
管理的头像管理
上一篇2025-03-09 13:14
下一篇 2025-03-09 13:15

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注