安全性架构

系统安全往往在设计之初会有考虑,但在项目进度和成本压力下,又容易忽视了安全,不管是主动或被动的。

系统安全设计需要增加成本而又不能直接带来效益,往往只有在系统被攻击、数据泄露、或甲方有聘期第三方安全厂商检测出数据安全问题时,才会关注软件安全问题。

在政企、医疗信息系统、教育信息系统这类由外部厂商开发的信息系统往往存在数据安全问题。

数据加密与解密

通过对用户密码、身份证号、银行卡号等敏感数据加密来保护数据安全,是软件安全架构的一部分,是程序员和架构师的责任。

在软件开发过程中,主要使用的加密方法有三种:

  • 单向散列加密
  • 对称加密
  • 非对称加密

单向散列加密

单向散列加密指对一串明文信息进行散列(Hash)加密,得到的密文信息是不可以被解密的。也就是说给定一个密文,即使是加密者也无法知道它的明文是什么,加密是单向的,不支持解密。

用户密码加密通常使用的是 单向散列加密

事实上,单向散列加密是一种 Hash 算法。常用的 MD5 就是一种单向散列加密算法,单向散列算法虽然无法通过密文进行解密计算来还原得到原始明文,但如果知道了算法,就可以通过 彩虹表 的方法进行破解。

彩虹表是常用明文和密文的映射表,得到了密文,可以通过查表的方法得到对应的明文。

在实践中使用单向散列算法加密,还需要在计算过程中加点 盐(salt),如果黑客不知道加的 是什么,就无法建立彩虹表,也就无法得到明文。

对称加密

对称加密就是使用一个加密算法和一个密钥,对一段明文进行加密以后得到密文。使用相同的密钥和对应的解密算法,对密文进行解密,即可得到明文。

对称加客情主要用于加密一些敏感信息,方便信息的传输和存储,但是在使用的时候必须得到明文的一些场景。

传输、存储使用密文,使用时对密文进行解密,还原得到明文才可以正常使用。

非对称加密

非对称加密 是指由对应的一对唯一性密钥(即公开密钥私有密钥)组成的加密方法,使用一个加密算法和一个加密密钥进行加密,得到相应的密文。在解密的时候,必须使用解密算法解密密钥进行解密才能还原得到明文。

非对称是指一对加密密钥解密密钥,这两个密钥是数学相关,用密钥加密后所得的信息,只能使用对称的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥

HTTP攻击与防护

在 HTTP 攻击中,最常见的是 SQL 注入攻击和 XSS 攻击。

SQL 注入攻击

SQL 注入攻击:指攻击者在提交的请求参数里掺杂了恶意的 SQL 脚本,以达到攻击的目的。

例如,登录时输入的用户名是:Tom’; drop table users;–

服务器在处理后就会生成以下SQL:select id from users where username = ‘Tom’; drop table users;–’;

最有效的防攻击手段是 SQL预编译,对于 Java 开发,最好使用 PrepareStatement 提交SQL,而 MySQL 等 ORM 框架主要的 SQL 提交方式就是用 PrepareStatement。

XSS 攻击

XSS攻击即跨站点脚本攻击(Cross Site Scripting),为了不和层叠样式(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS。恶意攻击者通常利用网页开发的漏洞,构造恶意的浏览器脚本到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是 JavaScript,但实际上也包括 Java, VBScript,ActiveX,Flash 或者甚至是普通 HTML。

XSS 攻击分为:存储型、反射型、DOM XSS 型。

  • 存储型XSS:持久化,代码是存储在服务器(数据库)中,持久型跨站。
  • 反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容)。
  • DOM XSS 型:不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。

防御 XSS 攻击的主要手段是消毒,即检查用户提交的请求中是否含有可执行的脚本,因为大部分的攻击请求都包含 JS 等脚本语法,可以通过 HTML 转义的方式,对有危险的脚本语法关键字进行转义。

可设置 Web 应用防火墙,自己开发一个统一的请求过滤器进行拦截,也可以使用 ModSecurity(https://github.com/SpiderLabs/ModSecurity) 这样开源的 WAF(Web Application Firewall)。

详细可参考:Web漏洞之XSS(跨站脚本攻击)详解

作者

光星

发布于

2023-08-31

更新于

2023-09-28

许可协议

评论