笔记整理

OWASP 10及其防护手段

 

 

1. SQL注入,

使用参数化查询语句(参数化预编译),数据库不会将参数中的内容视为sql语句的一部分来处理,而是在sql语句外完成编译后,才套用参数运行,所以就算含有恶意语句,因为已经被编译完成,就不会被数据库所运行javascript

2.失效的验证与链接管理

攻击者利用网站中的身份认证缺陷获取高权限并进行攻击应用服务html

防御:网站应该具有良好的身份管理于权限控制,使用数据签名的方式生成tonken(客户端请求的token和服务端session中的token进行比对,相同则放行)java

为token设置时效值算法

http://www.javashuo.com/article/p-pmqrabgg-cs.htmlsql

 

 

 

总结:cookie是一种数据存储的功能,服务器为了区分数据请求者,会生成一个session给客户端,每次请求时,客户端都会带着这个session的值去请求,而客户端中保存这个session值得方式,最经常使用得方式就是采用cookie得形式;而token也是一种身份校验的实例,为了解决session占用大量服务端资源的状况,故生成token值,token是采用md5加密算法+密钥,对数据作签名的方式来生辰token,因为密钥无人知道,就没法被伪造,服务端不保存tonken值,每次客户端请求时带上token值,由服务器来解密,获取其中的userid来校验用户身份,使用计算机的cpu计算时间解决计算机存储压力数据库

3.敏感数据泄露

主要是经过扫描应用程序获取到的敏感数据express

按期对目录进行扫描,给相关网站目录赋权安全

4.XML外部实体注入

当应用程序解析了外部实体的应用,攻击者传递包含恶意的xml代码的文件,读取指定的服务器资源服务器

防御:禁止外部实体的注入cookie

5.无效的访问控制

没有检查身份,直接致使攻击者绕过权限直接访问

垂直越权:对身份参数值使用白名单的方式,增长权限的检查

水平越权:对身份参数值使用白名单的方式,增长权限的检查

6.安全配置错误

攻击者利用错误配置,获取敏感数据或者提高权限

目录遍历、debug模式、文件上传校验、备份文件、数据库文件

7.跨站脚本攻击

应用程序未对输入字符进行校验和过滤,致使用户输入的数据被看成代码执行

结果:获取用户的cookie

><script>alert(document.cookie)</script>='>

<script>alert(document.cookie)</script>">

<script>alert(document.cookie)</script>

<script>alert(document.cookie)</script>

<script>alert (vulnerable)</script>%3Cscript%3Ealert('XSS')%3C/script%3E

<script>alert('XSS')</script>

<img src="javascript:alert('XSS')">

<img src="http://888.888.com/999.png" onerror="alert('XSS')">

<div style="height:expression(alert('XSS'),1)"></div>(这个仅于IE7(含)以前有效)

使用白名单机制,过滤或者替换非法字符

8.不安全的反序列化漏洞

攻击者利用应用程序反序列化功能,反序列化恶意对象攻击应用程序

危害:可致使远程代码执行rce

      注入攻击

      越权

漏洞防御:对数据对象签名,并做完整检查

隔离反序列化操做环境

 

序列化:将对象的状态信息转换为字节序列的过程

反序列化:将字节流还原成对象

应用场景:在服务器重启时,有些会话可能还会在进行相应的操做,这时候就须要使用序列化将session信息保存起来放在硬盘,服务器重启后,又从新加载。在不少状况下为了减轻内存压力会让某些对象进行序列化,让他们离开内存空间,入住物理硬盘,一边减轻内存压力

Java反序列化示例:

Java中的API实现

序列化:objectoutputstream类-àwriteobject()

(该方法对参数指定的obj对象进行序列化,把字节序列写到一个目标输出流中,按java的的标准约定是给一个文件一个.ser扩展名)

 

反序列化:objectinputstream类-àreadobject()

(该方法是从一个源输入流中读取字节序列,再把他们反序列化为一个对象,并将其返回)

 

如下为简单测试代码:

import java.io.*;

 

/*

import java.io.ObjectOutputStream;

import java.io.ObjectInputStream;

import java.io.FileOutputStream;

import java.io.FileInputStream;

*/

 

public class Java_Test{

 

    public static void main(String args[]) throws Exception {

        String obj = "ls ";

 

        // 将序列化对象写入文件object.txt中

        FileOutputStream fos = new FileOutputStream("aa.ser");

        ObjectOutputStream os = new ObjectOutputStream(fos);

        os.writeObject(obj);

        os.close();

 

        // 从文件object.txt中读取数据

        FileInputStream fis = new FileInputStream("aa.ser");

        ObjectInputStream ois = new ObjectInputStream(fis);

 

        // 经过反序列化恢复对象obj

        String obj2 = (String)ois.readObject();

        System.out.println(obj2);

        ois.close();

    }

 

}

 

9.使用含有已知漏洞的组件

利用应用程序技术栈中的框架、库、工具爆出的漏洞进行攻击,获取高权限或敏感数据

及时更新、修复组件漏洞,移除再也不使用的依赖组件

10.日志记录和监控不足致使的风险

对于日志记录的监控不足,形成攻击者攻击系统、应用、盗取数据等操做没法被追查

启用日志监控、告警机制

OSI/TCP框架

相关文章
相关标签/搜索