输入处理的安全性
# 1. Web 应用的功能与安全隐患的对应关系
# 1.1 整体认识
我们看一下 Web 应用的功能与安全隐患的对应关系,来对安全隐患有一个整体认识:
Web 应用常见的脚本输出和与其对应的安全隐患如下所示:
- 输出 HTML(跨站脚本)
- 输出 HTTP 消息头(HTTP 消息头注入)
- 调用 SQL 语句(SQL 注入)
- 调用 shell 命令(OS 命令注入)
- 调用邮件头和正文(邮件头注入)
之后会对各隐患进行介绍。
我们可以得出结论:
- 处理过程与输出过程会产生安全隐患
- 输入过程不会产生安全隐患
- 输出过程产生的安全隐患的名称中多数都带有“注入”
我们先看一下注入型隐患产生的原因。
# 1.2 注入型隐患
Web 应用中传递的信息多数为文本格式。HTML、HTTP 和 SQL 等支撑 Web 应用的技术多数都采用了文本格式的接口,这些文本格式都由各自的语法构成,其中还混合了命令、运算符和数据等。多数情况下,数据部分会通过使用引号或分隔符隔开的方式来区分。Web 应用的普遍形式为,首先确定文本的框架结构,然后再将数据填人其中。
SQL 注入攻击产生的原因就是,在被认定为“数据”的位置插入单引号是的数据部分结束,从而更改了 SQL 语句的构造。这个原理同样也适用于其他的注入型隐患:通过插入引号或分隔符等用于表示“数据部分边界”的字符,从而改变了文本的结构。
# 2. 输入处理与安全性
虽然校验输入值本身并不是安全性策略,但是,在安全性对策存在缺陷的情况下,通过校验输入值能够防止危害的发生,或者减轻损害的程度。
Web 应用中的输入即由 HTTP 请求传入的信息。输入处理就是指对输入值做如下处理:
- 检验字符编码的有效性:之所以检验字符编码的有效性有是因为存在利用字符编码的攻击手段。
- 必要时转换字符编码:指的是在 HTTP 消息与程序内部使用的字符编码不一致的情况下需要进行的处理。
- 检验参数字符串的有效性:更多的是依据应用软件规格执行的操作。
编辑 (opens new window)
上次更新: 2022/07/15, 15:40:06