互联网安全架构

​​​​​​​目录

常见的Web攻击手段

XSS攻击

CRSF攻击

SQL注入攻击

文件上传漏洞

DDOS攻击

常用的安全算法

数字摘要

对称加密算法

非对称加密算法

数字签名

数字证书

摘要认证



常见的Web攻击手段

XSS攻击

XSS(Cross Site Scripting)跨站脚本攻击,指攻击者在网页中嵌入恶意脚本程序,当用户打开该网页时,脚本程序便开始在用户的浏览器上执行,盗取客户端cookie、用户名密码,下载执行病毒程序,甚至是获取客户端admin权限等

CRSF攻击

CRSF(Cross site request forgery)跨站请求伪造,是一种对网站的恶意利用,通过伪造来自受信任用户的请求来利用受信任的网站,可以这么理解:攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求,CSRF能做的事情包括利用你的身份发邮件、发短信、进行交易转账,甚至盗用你的账号。

SQL注入攻击

SQL注入通过把SQL伪装成正常的HTTP请求参数,传递到服务端,欺骗服务器最终执行恶意的SQL命令。攻击者可以利用SQL注入漏洞,查询非授权信息,修改数据库服务器的数据,改变表结构,甚至获取服务器的root权限。

文件上传漏洞

文件上传攻击指的是恶意攻击者利用一些站点没有对文件类型做校验,上传了可执行的文件或者脚本,并且通过脚本获取服务器上相应的权利,或者通过诱导外部用户访问、下载上传的病毒或者木马文件,达到攻击的目的。

为了防范用户上传恶意的可执行文件和脚本,以及将文件服务器当做免费的文件存储服务器使用,需要对上传的文件类型进行白名单校验,并且限制上传文件的大小,上传的文件需要重命名,使攻击者无法猜测到上传文件的访问路径。

判断文件的类型,可以使用文件的魔数(magic number)

public enum FileType {
    /**
     * JPEG
     */
    JPEG("JPEG", "FFD8FF"),

    /**
     * PNG
     */
    PNG("PNG", "89504E47"),

    /**
     * GIF
     */
    GIF("GIF", "47494638"),

    /**
     * TIFF
     */
    TIFF("TIFF", "49492A00"),

    /**
     * Windows bitmap
     */
    BMP("BMP", "424D"),

    /**
     * CAD
     */
    DWG("DWG", "41433130"),

    /**
     * Adobe photoshop
     */
    PSD("PSD", "38425053"),

    /**
     * Rich Text Format
     */
    RTF("RTF", "7B5C727466"),

    /**
     * XML
     */
    XML("XML", "3C3F786D6C"),

    /**
     * HTML
     */
    HTML("HTML", "68746D6C3E"),

    /**
     * Outlook Express
     */
    DBX("DBX", "CFAD12FEC5FD746F "),

    /**
     * Outlook
     */
    PST("PST", "2142444E"),

    /**
     * doc;xls;dot;ppt;xla;ppa;pps;pot;msi;sdw;db
     */
    OLE2("OLE2", "0xD0CF11E0A1B11AE1"),

    /**
     * Microsoft Word/Excel
     */
    XLS_DOC("XLS_DOC", "D0CF11E0"),

    /**
     * Microsoft Access
     */
    MDB("MDB", "5374616E64617264204A"),

    /**
     * Word Perfect
     */
    WPB("WPB", "FF575043"),

    /**
     * Postscript
     */
    EPS_PS("EPS_PS", "252150532D41646F6265"),

    /**
     * Adobe Acrobat
     */
    PDF("PDF", "255044462D312E"),

    /**
     * Windows Password
     */
    PWL("PWL", "E3828596"),

    /**
     * ZIP Archive
     */
    ZIP("ZIP", "504B0304"),

    /**
     * ARAR Archive
     */
    RAR("RAR", "52617221"),

    /**
     * WAVE
     */
    WAV("WAV", "57415645"),

    /**
     * AVI
     */
    AVI("AVI", "41564920"),

    /**
     * Real Audio
     */
    RAM("RAM", "2E7261FD"),

    /**
     * Real Media
     */
    RM("RM", "2E524D46"),

    /**
     * Quicktime
     */
    MOV("MOV", "6D6F6F76"),

    /**
     * Windows Media
     */
    ASF("ASF", "3026B2758E66CF11"),

    /**
     * MIDI
     */
    MID("MID", "4D546864");

    private String key;
    private String value;

    FileType(String key, String value) {
        this.key = key;
        this.value = value;
    }

    public String getValue() {
        return value;
    }
    public String getKey() {
        return key;
    }
}


import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class FileUtil {

    /**
     * 获取文件投
     *
     * @param filePath 文件路径
     * @return 16 进制的文件投信息
     * @throws IOException
     */
    private static String getFileHeader(String filePath) throws IOException {
        byte[] b = new byte[28];
        InputStream inputStream = new FileInputStream(filePath);
        inputStream.read(b, 0, 28);
        inputStream.close();
        return bytes2hex(b);
    }

    /**
     * 将字节数组转换成16进制字符串
     */
    private static String bytes2hex(byte[] src) {
        StringBuilder stringBuilder = new StringBuilder("");
        if (src == null || src.length <= 0) {
            return null;
        }
        for (byte b : src) {
            int v = b & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }

    /**
     * 根据文件路径获取文件类型
     *
     * @param filePath 文件路径
     * @return 文件类型
     * @throws IOException
     */
    public static FileType getFileType(String filePath) throws IOException {
        String fileHead = getFileHeader(filePath);
        if (null == fileHead || fileHead.length() == 0) {
            return null;
        }
        fileHead = fileHead.toUpperCase();
        FileType[] fileTypes = FileType.values();
        for (FileType type : fileTypes) {
            if (fileHead.startsWith(type.getValue())) {
                return type;
            }
        }
        return null;
    }
}



DDOS攻击

DDOS(distributed denial of service)分布式拒绝服务攻击,目前最为强大、最难以防御的攻击方式之一,攻击者借助公共网络,将数量庞大的计算机设备联合起来作为攻击平台,对一个或者多个目标发起攻击,从而达到瘫痪目标主机的目的。

常用的安全算法

数字摘要

1. MD5

2. SHA

3. 16进制编码

4. Base64编码

对称加密算法

对称加密算法的安全性依赖于密钥

1. DES

2. 3DES

3. AES

非对称加密算法

又称为公开密钥加密算法,需要两个密钥,一个称为公开密钥(public key),即公钥,一个称为私有密钥(private key),即私钥。

RSA

数字签名

签名认证是对非对称加密技术与数字摘要技术的综合运用

数字证书

摘要认证

你可能感兴趣的:(技术架构,安全架构,安全,web安全)