美文网首页程序员
注入攻击学习笔记

注入攻击学习笔记

作者: deniro | 来源:发表于2018-12-23 13:54 被阅读32次

    安全设计原则:数据与代码分离。

    注入攻击的本质:把用户的输入数据当作代码来执行。

    关键条件:

    1. 用户能够控制输入。
    2. 程序要执行的代码拼接了用户输入的数据。

    1 SQL 注入

    1.1 概述

    因为 98 年黑客杂志的一篇文章, SQL 注入第一次为人熟知。

    var sql="select * from area where city ='" + city +"'";
    

    正常场景(传入 Shanghai),执行的 SQL 语句:

    select * from area where city = 'Shanghai';
    

    黑客传入有语义的参数:

    Shanghai'; drop table area--
    

    这时,执行的 SQL 语句为:

    select * from area where city = 'Shanghai'; drop table area--
    

    这样的话,查询语句执行后,相应的表也被恶意删除了!

    1.2 防御误区

    使用那些基于黑名单的方法,比如过滤字符。存在如下问题:

    方法 攻击
    过滤空格 select/**/city/**/from/**/areaselect(city)from(area)
    过滤括号与引号 0x61646D696E
    过滤 SQL 保留字 having、order by 可能出现在自然语言中,会造成误杀。

    1.3 有效防御

    1、预编译语句

    这是防御 SQL 注入攻击的最佳方法,因为输入的参数不会改变 SQL 语句的语义。

    2、存储过程

    使用存储过程的效果与预编译语句相似。但应该尽量避免在内部动态生成 SQL 语句。


    如果某些场合,无法使用预编译语句或存储过程,那么可以考虑以下方法:

    3、检查数据类型

    检查数据类型可以在一定程度上对抗注入攻击。但不是万能的,比如字符串类型,就需要依赖其他防御方法。

    4、安全函数

    OWASP ESAPI

    5.数据库

    最小权限原则:Web 应用应该避免使用 root 等最高权限账户(因为这些账户可以创建自定义函数、操作本地文件权限)。

    2 其它类型注入

    它们的相同特点:都是违反了数据与代码分离。

    2.1 XML 注入

    注入方式上与 HTML 类似。

    2.2 代码注入

    都是由一些不安全的函数或者方法引起的。

    比如 js 的 eval()eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

    在 Java 中可以利用脚本引擎实施 js 代码注入。


    安全设计原则:数据与代码分离。

    相关文章

      网友评论

        本文标题:注入攻击学习笔记

        本文链接:https://www.haomeiwen.com/subject/izedkqtx.html