Web应用安全权威指南 8.2分
读书笔记 4.2


输入校验与安全性

虽然输入校验的主要目的并不是安全性,但有时却也能对提高应用的安全性大有裨益。例如以下情况。

在有些参数忘了防范 SQL 注入攻击的情况下,因为输入检验时只允许字母和数字,所以就能避免损害

在 PHP 中使用了非二进制安全的函数(稍后讲述)的情况下,因为输入校验时过滤了控制字符,所以就能避免损害

在页面显示处理函数中对字符编码的指定有所疏忽时,因为输入校验时检验了字符编码的有效性,所以就能避免损害 5

二进制安全与空字节攻击

刚才出现了“二进制安全”这个用语。二进制安全是指,不管输入值是怎样的字节列都能将其原封不动地进行处理的功能,特别是当包含零值字节(NULL 字节,PHP 中记为 \0)时也能正确处理。

空字节之所以特殊,是因为在 C 语言以及 Unix 与 Windows 的 API 中规定空字节为字符串的结尾。因此,底层为 C 语言的 PHP 以及其他脚本语言中,有些函数不能正确处理空字节。而这类函数就被称为不是二进制安全的函数。

利用空字节的攻击手段被称为空字节攻击。空字节攻击本身并不造成伤害,而是通常被用于绕过其他安全隐患的防范策略。

0
《Web应用安全权威指南》的全部笔记 25篇
豆瓣
免费下载 iOS / Android 版客户端