zoukankan      html  css  js  c++  java
  • 防止SQL注入

    SQL注入是比较常见的网络攻击方式之一,不是BUG是编程逻辑上容易疏忽导致的潜在危险。也是比较常见的老问题了。

    作为攻击方,SQL注入的总体思路是这样

            1.寻找位置,比如哪个能输入内容的地方。

            2.判断服务器类型和后台数据库类型。

            3.针对不同的服务器和数据库特点进行SQL注入攻击。

    攻击例子

    在登录界面里,要求输入用户名和密码:

    可以这样输入实现免账号登录:

    用户名: ‘or 1 = 1 --

    密码:

    这个是最基本简单的攻击例子,点击登录,如果没有做特殊处理那么这个非法用户就可以登录进去。(当然现在的有些语言的数据库API已经处理了这些问题)

    原理是这样,正常的流程可能是:

    "select * from user_table where username=' "+userName+" ' and password=' "+password+" '";

    然后输入上面后执行SQL语句的时候变成这样:

    SELECT * FROM user_table WHERE username='’or 1 = 1 -- and password=''

    条件后面username=”or 1=1 用户名等于 ” 或1=1 那么这个条件一定会成功;然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用,这样语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

    然后再来一个更暴力的破坏方式:

    SELECT * FROM user_table WHERE username='' ;DROP DATABASE (DB Name) --' and password=''


    下面是重点,怎样应对常见的SQL注入攻击(针对JSP说)

    1.PreparedStatement(简单有效)

    用预编译语句集,它内置了处理SQL注入的能力,具体原理可以看这个:

    https://blog.csdn.net/qq_25302531/article/details/80250505

    好处

    1. .代码的可读性和可维护性。
    2. PreparedStatement尽最大可能提高性能。
    3. 最重要的一点是极大地提高了安全性。

    2.正则表达式、字符串过滤、非法字符、SP页面判断代码

        这些都是类似的方式,检测,排除一些字符串特征。然后直接要求用户重新输入合规的字符串进行存储和下一步。需要有耐心和细心尽可能把条件都写全,考虑完整。

     

     

     

     

     

     

  • 相关阅读:
    (SQL)如何将exec执行结果放入外面的变量中--动态sql语句
    Building and Installing ACE on Win32 with MinGW/ MSYS
    TAO和CIAO 简介
    Papervision3D 基础
    ACE网络开发中,各种Reactor实现的总结
    [转]第四期FLASH专家交流会 7月24日 广州东方国际饭店
    ACE介绍及简单服务器实例
    ACE相关资源
    Windows下用Eclipse搭建C/C++开发环境
    ACE的编译和安装,for windows、Linux
  • 原文地址:https://www.cnblogs.com/csnd/p/12061888.html
Copyright © 2011-2022 走看看