NoteDeep
  • 总是对变量进行初始化
  • 总是对外部数据进行合法性验证

外部参数限制
方法
是否存在
isset()
是否为空
empty()
类型
is_numeric() is_integer()
边界
限制参数的值在合理的范围内
长度
限制参数长度在合理的范围内
模式
使用相关函数(例如ctype_alpha())或正则表达式进行验证
字符集
避免乱码,使用iconv_,mb_系列函数

  • 对输入输出进行转义和过滤
SQL查询语句:
调用mysql_real_escape_string()或者addslashes()进行转义;

文件系统API(如open)调用:
必须限制CGI可访问的文件和目录的范围;
禁止利用外部参数构造文件和路径名;
过滤掉在路径参数中出现的./和../字符序列;

System Call或者OS Shell:
限制或禁止可以使用的系统调用和Shell命令;
对于作为系统调用或Shell命令参数列表的外部参数,需调用相应的函数(如escapeshellcmd(),escapeshellarg()等)转义其中的Shell元字符。

CRLF:
在把参数输出到HTTP头部之前,过滤掉其中的回车换行符(使用str_replace)

跨站脚本注入:
调用htmlentities()或者htmlspecialchars();

include/require调用:
include/require要使用全路径引用其它PHP脚本,仅使用文件名可能导致二义性问题;对输入中的路径修饰符进行strip(如./和../);

评论列表