• SQL注入原理以及怎样避免注入


    SQL注入:究竟什么时候会用到SQL呢?回答是訪问数据库的时候。也就是说SQL注入-->直接威胁到了数据源,呵呵。数据库都收到了威胁,站点还能正常现实么?

    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串。终于达到欺骗server运行恶意的SQL命令。

    详细来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎运行的能力,它能够通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的站点上的数据库。而不是依照设计者意图去运行SQL语句。

    [1] 比方先前的非常多影视站点泄露VIP会员password大多就是通过WEB表单递交查询字符暴出的,这类表单特别easy受到SQL注入式攻击

    依据相关技术原理,SQL注入能够分为平台层注入和代码层注入。

    前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是因为程序猿对输入未进行仔细地过滤,从而运行了非法的数据查询。基于此,SQL注入的产生原因通常表如今下面几方面:①不当的类型处理;②不安全的数据库配置。③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。

    注入方法:

    1.猜表名。列名等

    先猜表名
    And (Select count(*) from 表名)<>0
    猜列名
    And (Select count(列名) from 表名)<>0
    或者也能够这样
    and exists (select * from 表名)
    and exists (select 列名 from 表名)
    返回正确的,那么写的表名或列名就是正确

    2.后台身份验证绕过漏洞
    验证绕过漏洞就是'or'='or'后台绕过漏洞,利用的就是AND和OR的运算规则,从而造成后台脚本逻辑性错误
    比如管理员的账号password都是admin。那么再比方后台的数据库查询语句是
    user=request("user")
    passwd=request("passwd")
    sql='select admin from adminbate where user='&'''&user&'''&' and passwd='&'''&passwd&'''
    那么我使用'or 'a'='a来做usernamepassword的话,那么查询就变成了
    select admin from adminbate where user=''or 'a'='a' and passwd=''or 'a'='a'
    这种话,依据运算规则。这里一共同拥有4个查询语句,那么查询结果就是 假or真and假or真,先算and 再算or,终于结果为真 。这样就能够进到后台了

    怎样预防 呢?归纳一下,主要有下面几点:

    1.永远不要信任用户的输入。对用户的输入进行校验,能够通过正則表達式,或限制长度;对单引號和
    双"-"进行转换等。

    2.永远不要使用动态拼装sql,能够使用參数化的sql或者直接使用存储过程进行数据查询存取。
    3.永远不要使用管理员权限的数据库连接,为每一个应用使用单独的权限有限的数据库连接。

    4.不要把机密信息直接存放。加密或者hash掉password和敏感的信息。
    5.应用的异常信息应该给出尽可能少的提示,最好使用自己定义的错误信息对原始错误信息进行包装
    6.sql注入的检測方法一般採取辅助软件或站点平台来检測。软件一般採用sql注入检測工具jsky,站点平台就有亿思站点安全平台检測工具。MDCSOFT SCAN等。採用MDCSOFT-IPS能够有效的防御SQL注入。XSS攻击等。
    等待试验........

  • 相关阅读:
    Django-haystack对接elasticsearch
    Django http 和 https 官网解答
    -bash: nohup: command not found
    Mysql 10060登录异常解决方法
    ssh
    sed grep awk用法
    grep用法
    shell 随笔
    列表生成式
    css
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7225406.html
Copyright © 2020-2023  润新知