使用参数化查询语句(参数化预编译),数据库不会将参数中的内容视为sql语句的一部分来处理,而是在sql语句外完成编译后,才套用参数运行,所以就算含有恶意语句,因为已经被编译完成,就不会被数据库所运行javascript
攻击者利用网站中的身份认证缺陷获取高权限并进行攻击应用服务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计算时间解决计算机存储压力数据库
主要是经过扫描应用程序获取到的敏感数据express
按期对目录进行扫描,给相关网站目录赋权安全
当应用程序解析了外部实体的应用,攻击者传递包含恶意的xml代码的文件,读取指定的服务器资源服务器
防御:禁止外部实体的注入cookie
没有检查身份,直接致使攻击者绕过权限直接访问
垂直越权:对身份参数值使用白名单的方式,增长权限的检查
水平越权:对身份参数值使用白名单的方式,增长权限的检查
攻击者利用错误配置,获取敏感数据或者提高权限
目录遍历、debug模式、文件上传校验、备份文件、数据库文件
应用程序未对输入字符进行校验和过滤,致使用户输入的数据被看成代码执行
结果:获取用户的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(含)以前有效)
使用白名单机制,过滤或者替换非法字符
攻击者利用应用程序反序列化功能,反序列化恶意对象攻击应用程序
危害:可致使远程代码执行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();
}
}
利用应用程序技术栈中的框架、库、工具爆出的漏洞进行攻击,获取高权限或敏感数据
及时更新、修复组件漏洞,移除再也不使用的依赖组件
对于日志记录的监控不足,形成攻击者攻击系统、应用、盗取数据等操做没法被追查
启用日志监控、告警机制
OSI/TCP框架