安全原则1:不相信用户的任何输入(注入,跨站攻击)和任何不可信的外部数据来源(反射问题)
安全原则2:对任何需要加密的内容,进行加密(密码、密级问题,字符串特性)
安全原则3:深刻理解不期望数据对业务逻辑的影响,特别是灾难性的影响(例如数字正负,精度问题等)
跨站/跨框架脚本攻击
反射型
问题1:反射型跨站脚本攻击
问题2:针对所有客户端的CGI反射型跨站脚本攻击
描述:将输入直接返回给输出造成的前端代码执行(攻击)
解决:对输入进行特殊字符校验和转码
存储型
问题:CGI存储型跨站脚本
描述:从数据库中取出的数据送回给前端,可能还有恶意代码。扫描中全部是excel生成的代码,属于误报
解决:对数据库取回的数据,要做输出校验
客户端DOM型
问题1:基于客户端DOM的跨站脚本
问题2:客户端潜在的跨站脚本攻击
描述:客户端使用输入内容构建动态的DOM,此时可能产生潜在的代码执行
解决:在构建前进行检查和必要的转码
跨框架
问题:客户端跨框架脚本攻击
描述:框架中是真正的网站,而框架代码外可以监控网站输入
解决:https://www.cnblogs.com/zrp2013/p/3818027.html
文件相关
路径问题
问题:绝对路径遍历
描述:从用户或外部获取的一个路径,可能访问不应该访问的文件或假借程序实现对文件的权限控制(例如利用程序的打印功能,打印某些不在系统内部的文件内容)
解决:白名单或黑名单,严格限制文件范围
问题:输入路径不规范
描述:此问题会导致程序执行可能的、不期望的恶意程序
解决:黑白名单
资源相关
问题:资源关闭或释放不当
描述:一般时没有finally块实现资源的释放
解决:增加finally确保释放资源
语言层面
语法相关
问题:未检测循环条件输入
描述:给一个非常高的值,导致程序崩溃(拒绝服务)
解决:不要基于用户的输入建立循环,如果必须,则要进行校验
问题:正则表达式注入导致客户端拒绝服务
描述:黑客精心构造的字符串,在进行正则表达式运算时,系统无法响应
解决:对字符串进行合规校验,确保不会引起不适当的资源利用
序列化和反序列化
问题:不安全的反序列化
描述:ObjectInputStream的readObject方法并不能判断对象的合法性
解决:ValidatingObjectInputStream这种对象可以限制反序列化的对象是否合规
密码相关
问题:方法中的硬编码密码
描述:不得进行硬编码,有代码权限就知道密码,或可以反编译; 也不要使用空密码和null密码;
解决:从加密的外部资源获取
问题:使用未加盐的单向哈希
描述:未加盐就生成哈希值,会造成容易破解
解决:随机且足够长度的盐值,但不要硬编码
问题:使用硬编码加密密钥
描述:硬编码密钥,会造成和硬编码密码同样的后果
解决:从加密的外部资源获取
反射机制相关
问题:基于客户端DOM的代码注入
描述:根据前端获取的类名进行反射得到超类,并执行其中的方法;黑客可能会伪造子类,并在目标方法中代码;
解决:尽量不使用这种方法实现业务逻辑;同时对反射对象进行严格的限制;检查对象的访问权限等。
问题:第三方代码未检验其来源的合法可靠性
描述:代码引入了恶意库,或由反射机制导致了部分的类被实例化
解决:同上
字符串相关
问题:堆检测
描述:String是final类型,如果存储了密码,会在GC前驻留内存,存在隐患
解决:内存中不存储明文;使用内存加密类(例如SealedObject),使用字节数组,用后补0(相当于抹掉)
数字相关
问题:使用float进行比较
描述:float计算和比较,由于精度问题导致逻辑异常
解决:使用BigDecimal或通过比较确定等于和不等于
问题:使用不够随机的伪随机数
描述:Random的随机数是统计学意义上的(易于预测和数据流复制),不是密码学意义上的
解决:使用SecureRandom替代Random
其它
Cookie相关
问题:HttpOnlyCookies
描述:HttpCookieOnly没有设置,导致客户端脚本可以访问敏感信息;
解决:cookie.setHttpOnly(true);
未验证输入导致的漏洞
问题:http响应拆分
描述:在返回的response里加入从输入进来的未经校验的字符(通常是cookie的某些值),这些字符中可能包含回车或换行,则会造成response分成了两个;
解决:对输入/输出进行校验,仅允许特定的值
问题:非标准化输入字符串
描述:软件不验证或不正确验证用户或外部的输入。程序可能认为这部分不会被修改,或不可能的数据(例如数量不可能是负数),但如果一旦发生,就会造成不可预知的后果
解决:不相信一切客户或外部输入,全部要经过白名单或黑名单的校验
问题:信任边界违规
描述:验证或未验证数据都放到同一个数据结构中,例如session,request等,导致未验证数据当作可信数据
解决:放入数据结构前,进行合规校验
隐私相关
问题:隐私违规
描述:客户隐私(例如密码)进入系统,并被写入到外部介质(例如文件,作为日志打印到控制台)
解决:加强对隐私数据的管理










网友评论