iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >防止SQL注入的实现方式有哪些
  • 696
分享到

防止SQL注入的实现方式有哪些

2024-04-02 19:04:59 696人浏览 独家记忆
摘要

今天就跟大家聊聊有关防止sql注入的实现方式有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、SQL注入简介SQL注入是比较常见的网络攻击方式

今天就跟大家聊聊有关防止sql注入的实现方式有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、SQL注入简介

SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库

二、SQL注入攻击的总体思路

1.寻找到SQL注入的位置

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

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

三、SQL注入攻击实例

比如在一个登录界面,要求输入用户名和密码:

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

用户名: ‘or 1 = 1 –

密 码:

点登陆,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了.(当然现在的有些语言的数据库api已经处理了这些问题)

这是为什么呢? 下面我们分析一下:

从理论上说,后台认证程序中会有如下的SQL语句:

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

当输入了上面的用户名和密码,上面的SQL语句变成:

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

分析SQL语句:

条件后面username=”or 1=1 用户名等于 ” 或1=1 那么这个条件一定会成功;

然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用,这样语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

这还是比较温柔的,如果是执行

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

….其后果可想而知…

四、应对方法

下面我针对jsP,说一下应对方法:

1.(简单又有效的方法)PreparedStatement

采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。

使用好处:

(1).代码的可读性和可维护性.

(2).PreparedStatement尽最大可能提高性能.

(3).最重要的一点是极大地提高了安全性.

原理:

sql注入只对sql语句的准备(编译)过程有破坏作用

而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,

而不再对sql语句进行解析,准备,因此也就避免了sql注入问题.

2.使用正则表达式过滤传入的参数

要引入的包:

import java.util.regex.*;

正则表达式:

private String CHECKSQL = “^(.+)\\sand\\s(.+)|(.+)\\sor(.+)\\s$”;

判断是否匹配:

Pattern.matches(CHECKSQL,targerStr);

下面是具体的正则表达式:

检测SQL meta-characters的正则表达式 :

/(\%27)|(\’)|(\-\-)|(\%23)|(#)/ix

修正检测SQL meta-characters的正则表达式 :/((\%3D)|(=))[^\n]*((\%27)|(\’)|(\-\-)|(\%3B)|(:))/i

典型的SQL 注入攻击的正则表达式 :/\w*((\%27)|(\’))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix

检测SQL注入,UNION查询关键字的正则表达式 :/((\%27)|(\’))union/ix(\%27)|(\’)

检测MS SQL Server SQL注入攻击的正则表达式:

/exec(\s|\+)+(s|x)p\w+/ix

等等…..

3.字符串过滤

比较通用的一个方法:

(||之间的参数可以根据自己程序的需要添加)

public static boolean sql_inj(String str){
String inj_str = "'|and|exec|insert|select|delete|update|
count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";
String inj_stra[] = split(inj_str,"|");
for (int i=0 ; i < inj_stra.length ; i++ ){
if (str.indexOf(inj_stra[i])>=0){
return true;
}
}
return false;
}

4.jsp中调用该函数检查是否包函非法字符

防止SQL从URL注入:

sql_inj.java代码:
package sql_inj;
import java.net.*;
import java.io.*;
import java.sql.*;
import java.text.*;
import java.lang.String;
public class sql_inj{
public static boolean sql_inj(String str){
String inj_str = "'|and|exec|insert|select|delete|update|
count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";
//这里的东西还可以自己添加
String[] inj_stra=inj_str.split("\\|");
for (int i=0 ; i < inj_stra.length ; i++ ){
if (str.indexOf(inj_stra[i])>=0){
return true;
}
}
return false;
}
}

5.JSP页面判断代码:

使用javascript在客户端进行不安全字符屏蔽

功能介绍:检查是否含有”‘”,”\\”,”/”

参数说明:要检查的字符串

返回值:0:是1:不是

函数名是

function check(a){
return 1;
fibdn = new Array (”‘” ,”\\”,”/”);
i=fibdn.length;
j=a.length;
for (ii=0; ii<i; ii++)
{ for (jj=0; jj<j; jj++)
{ temp1=a.charAt(jj);
temp2=fibdn[ii];
if (tem’; p1==temp2)
{ return 0; }
}
}
return 1;
}

总的说来,防范一般的SQL注入只要在代码规范上下点功夫就可以了。

凡涉及到执行的SQL中有变量时,用JDBC(或者其他数据持久层)提供的如:PreparedStatement就可以 ,切记不要用拼接字符串的方法就可以了。

看完上述内容,你们对防止SQL注入的实现方式有哪些有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网数据库频道,感谢大家的支持。

您可能感兴趣的文档:

--结束END--

本文标题: 防止SQL注入的实现方式有哪些

本文链接: https://www.lsjlt.com/news/41704.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 防止sql注入的方式有哪些
    这篇文章主要讲解了“防止sql注入的方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“防止sql注入的方式有哪些”吧!  防止SQL注入的方式有:执行...
    99+
    2024-04-02
  • java防止sql注入的方式有哪些
    Java防止SQL注入的方式有以下几种:1. 使用参数化查询(Prepared Statement):使用PreparedState...
    99+
    2023-08-23
    java sql
  • 防止SQL注入的方法有哪些
    防止SQL注入的方法有:采用PreparedStatement进行预编译,sql语句在执行的过程中效率比Statement要高,例如:String sql = "select* from users where...
    99+
    2024-04-02
  • java防止sql注入的方法有哪些
    java防止sql注入的方法有:采用PreparedStatement进行预编译,sql语句在执行的过程中效率比Statement要高,例如:String sql = "select* from users wher&#...
    99+
    2024-04-02
  • jdbc防止sql注入的方法有哪些
    使用PreparedStatement来执行SQL语句,而不是Statement。PreparedStatement使用占位符来...
    99+
    2024-04-09
    jdbc
  • php防止sql注入的方法有哪些
    1. 使用预处理语句和绑定参数:使用PDO或mysqli扩展来执行SQL查询,使用预处理语句和绑定参数的方式来防止SQL注入。预处理...
    99+
    2023-08-23
    php sql
  • 防止web项目中的SQL注入方法有哪些
    这篇文章主要介绍“防止web项目中的SQL注入方法有哪些”,在日常操作中,相信很多人在防止web项目中的SQL注入方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”防止web项目中的SQL注入方法有哪些...
    99+
    2023-06-21
  • 防止sql注入的方法有哪几种
    防止SQL注入的方法有哪几种,需要具体代码示例 SQL注入是一种常见的网络安全威胁,它可以让攻击者通过构造恶意的输入来修改、删除或者泄露数据库中的数据。为了有效防止SQL注入攻击,开发...
    99+
    2024-02-22
    参数化查询 输入验证和过滤 使用orm框架 防止sql注入
  • php防止sql注入的方法有哪几种
    使用预处理语句:使用PDO或者MySQLi等数据库扩展,可以通过绑定参数的方式来执行SQL语句,从而避免SQL注入攻击。 进...
    99+
    2024-04-29
    php sql
  • sql注入的方式有哪些
    这篇文章主要讲解了“sql注入的方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“sql注入的方式有哪些”吧! sql注入...
    99+
    2024-04-02
  • 防范sql注入的方法有哪些
    这篇文章主要介绍防范sql注入的方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!防止SQL注入的方式有:执行sql语句时使用addslashes进行sql语句转换,过滤掉sq...
    99+
    2024-04-02
  • SQL注入的防御方法有哪些
    这篇文章主要介绍了SQL注入的防御方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQL注入的防御方法有哪些文章都会有所收获,下面我们一起来看看吧。限制数据类型在传入参数的地方限制参数的类型,比如整型 ...
    99+
    2023-07-02
  • 哪些工具可以防止sql注入
    可以防止sql注入的工具有:SQLIer,它可以找到网站上一个有SQL注入漏洞的URL,并根据有关信息来生成利用SQL注入漏洞,但它不要求用户的交互。SQLMap是一个自动的“盲目”SQL注入工具。SQLID是一个SQL注入漏洞挖掘器,也是...
    99+
    2024-04-02
  • mysql防止sql注入的方法
    这篇文章将为大家详细讲解有关mysql防止sql注入的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 SQL Injection攻击具有很大的危害,攻击者可...
    99+
    2024-04-02
  • Mybatis防止sql注入的实例
    sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1'='1'”这样的语句,有可能入侵参数校验不足的应用程序。所以在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些...
    99+
    2023-05-31
    mybatis sql 注入
  • 如何有效防止sql注入的方法
    SQL注入攻击是黑客对数据库进行攻击常用的手段之一,随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验参差不齐,相当大一部分程序员在...
    99+
    2024-04-02
  • Java项目防止SQL注入的方式总结
    目录 一、什么是SQL注入? 二、Java项目防止SQL注入方式 1、PreparedStatement防止SQL注入 2、mybatis中#{}防止SQL注入 3、对请求参数的敏感词汇进行过滤 4、nginx反向代理防止SQL注入 ...
    99+
    2023-09-03
    java nginx mybatis
  • 防止SQL注入攻击的方法
    小编给大家分享一下防止SQL注入攻击的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! SQL注入是一种注入攻击,可...
    99+
    2024-04-02
  • 怎么有效防止sql注入
    这期内容当中小编将会给大家带来有关怎么有效防止sql注入,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一 背景数据如下:本系统采用mysql做为数据库,使用Jdbc来进行数据库的相关操作。系统提供了一个功...
    99+
    2023-06-15
  • 如何有效防止sql注入
    如何有效防止sql注入?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。@RestController public c...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作