• 防止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页面判断代码

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

     

     

     

     

     

     

  • 相关阅读:
    主机的IOPS需求转换成硬盘实际IOPS负载
    IT安全运维职责
    IT应用运维职责
    存储RAID 选择策略
    交换机接口下错包计数,哪些是属于物理链路(包括本端设备和对端设备硬件问题)引起的
    华为交换机SNMP配置
    c# 位与运算符&简单实现复选框功能【实际应用】
    centos7 安装谷歌浏览器教程
    centos7下 Consul安装
    .netcore3.1 获取请求头header中认证信息并调用其它接口
  • 原文地址:https://www.cnblogs.com/csnd/p/12061888.html
Copyright © 2020-2023  润新知