zoukankan      html  css  js  c++  java
  • 02服务器安全-注入攻击

    注入攻击的本质是: 把用户输入的数据当做代码执行. 这有两个条件:

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

    例如: var sql = "select * from OrdersTable where ShipCity = '"+ShipCity+"';

    如果用户输入了city名字,比如 Beijing, 那么查询语句是这样的:

    select * from OrdersTable where ShipCity = 'Beijing', 但是, 如果用户输入: Beijing';drop table OrdersTable -- 那么 SQL 语句就会变成

    select * from OrdersTable where ShipCity = 'Beijing'; drop table OrdersTable --'

    在 SQL 注入过程中, 如果网站的 Web 服务器开启了错误回显, 则会为攻击者提供极大的便利, 比如攻击者在参数中输入一个单引号" ' ",那么会引起执行查询语句的语法错误,服务器直接返回了错误信息:

     从错误信息中, 可以看到服务器是 Access 数据库, 查询的表达式可能是 select xxx from table_x where id = $id

    盲注

    很多时候, web 服务器关闭了错误回显,比如通过构造简单的条件语句,根据返回页面是否发生变化来判断SQL语句是否得到执行. 比如:

    一个URL: http://newspaper.com/item.php?id=2

    执行的SQL: select title, description, body FROM items where id = 2

    攻击者构造如下条件语句  http://newspaper.com/item.php?id=2 and 1 = 2

    实际执行: select title, description, body FROM items where id = 2 and 1 = 2, 这样攻击者会看到页面结果为空 或者一个出错的页面。

    攻击者可以再尝试 http://newspaper.com/item.php?id=2 and 1 = 1, 此时就可以判断漏洞存在, 是可以注入的.

    防御SQL注入

    防御SQL注入的最佳方式, 使用预编译语句, 绑定变量, 这样, 即便在变量上做什么改变, 也会看做是变量“整体”. 实际上相当于破坏了第二条即拼接了输入数据,这时就不是把用户输入拼接到代码上了,而是用户输入数据作为了一个整体, 比如如果用户输入  Beijing'; drop table OrdersTable -- , 那边就只表示用户输入的是这个城市

    String query = "SELECT account from user_data where user_name = ?";     这里使用了绑定变量.

    先编译这条SQL 语句, 然后SQL 语句的语义不会发生改变了,输入的内容, 只能作为变量了.

    所以说, 这里的主要区别是, 不是拼接, 而是使用绑定变量替换变量的方式, 无论用户输入什么, 都会是变量的一部分, 永远也无法拼接到 SQL 语句中.

    所以, 推荐必须使用绑定变量的方式. 另外就是用户的输入, 必须要有 validation.

    其他注入

    xml注入 & HTML 注入(比如 javascript)

    解决的办法是: 对用户输入数据中包含“语言本身的保留字”进行转义即可.

    对抗代码注入,命令注入时,需要禁用 eval(), system() 等可以执行命令的函数.

    代码注入旺旺是由于不安全的编程习惯造成的. 即应该尽量避免数据与代码的拼接. 应该更多的是再抽象出来一层, 使得输入真正的作为一个变量整体, 而不是可以作为代码的一部分.

    CRLF注入 即换行回车注入

    比如注入 HTTP 头中, HTTP头是通过 来隔的,因此如果服务器没有过滤 , 而又把用户输入的数据放在 HTTP 头中,可能导致安全隐患.

    例如如果用户输入两次 表示换2行(HTTP头默认的换两行表示 HTTP头结束, 那后面的信息就没有代入)

    主要还是要解决: 代码与数据分离的问题.

  • 相关阅读:
    连载《一个程序猿的生命周期》-《发展篇》- 6.2016年发展元年,本职工作和个人事业均有突破和起色
    转载 | 北漂纪实:70后最幸福、80后买不起房、90后一手烂牌
    连载《一个程序猿的生命周期》-《发展篇》
    连载《一个程序猿的生命周期》-《发展篇》
    连载《一个程序猿的生命周期》-《发展篇》
    连载《一个程序猿的生命周期》-《发展篇》
    连载《一个程序猿的生命周期》-《发展篇》
    随笔《一个程序猿的生命周期》- 拉风险投资搞创业是一种病吗?
    ubuntu 解决安装dpkg 依赖错误
    Ubuntu 卸载 nginx 并重新安装
  • 原文地址:https://www.cnblogs.com/moveofgod/p/12360543.html
Copyright © 2011-2022 走看看