如何防止sql注入?介绍5种防止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 WHEREusername='' ;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 = “^(.+)sands(.+)|(.+)sor(.+)s$”;

判断是否匹配:

Pattern.matches(CHECKSQL,targerStr);

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

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

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

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

/((%3D)|(=))[^]*((%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)pw+/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 =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 =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中有API0时,用JDBC(或者其他数据持久层)提供的如:PreparedStatement就可以 ,切记不要用拼接字符串的方法就可以了。

【相关推荐】

1. 特别推荐:API1

2. API2

火山方舟 火山方舟

火山引擎一站式大模型服务平台,已接入满血版DeepSeek

火山方舟 99 查看详情 火山方舟

3. API3

4. API4

以上就是如何防止sql注入?介绍5种防止sql注入的方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/410790.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月6日 23:10:16
下一篇 2025年11月6日 23:14:53

相关推荐

  • 如何通过纯CSS实现图片的放大缩小效果的方法和技巧

    如何通过纯CSS实现图片的放大缩小效果的方法和技巧 在现代的网页设计中,图片的展示和处理是非常重要的一部分。而图片的放大缩小效果可以为网站的视觉呈现增添趣味和交互性。在这篇文章中,我们将介绍如何通过纯CSS实现图片的放大缩小效果,并提供具体的代码示例。 使用transition属性实现平滑的过渡效果…

    2025年12月24日
    000
  • 利用CSS实现折叠内容面板特效的技巧和方法

    利用CSS实现折叠内容面板特效的技巧和方法 在网页设计中,折叠内容面板是一种非常常见的特效。通过点击或其他交互形式,隐藏或展示特定内容,以提供更好的用户体验。而利用CSS实现折叠内容面板特效,则是一种简单而有效的方法。本文将介绍一些实现这一特效的技巧和方法,并提供具体的代码示例。 使用checkbo…

    2025年12月24日
    000
  • css如何清除下划线?css清除下划线有哪些方法

    css怎么清除下划线?css去除下划线方法有哪些?很多人可能还不知道怎么操作,下面我们来讲解一下。在css中,我们可以使用text-decoration属性来表示下划线和删除线等样式,首先我们要了解一下text-decoration属性。 text-decoration属性一共有五个值,分别是non…

    2025年12月24日
    100
  • css如何让div居中?css实现div居中的方法

    如何让div水平居中?div怎么居中?相信很多人都会这样的疑问,本篇文章就讲解一下css如何让div居中?以及如何实现div居中的方法。 当我们浏览网页的时候,会发现一般网站的主体都是在页面的中间,并且居中显示在浏览器中的正中央,只要我们实现div居中条件和浏览器居中条件保存一致。 假如我们把最外层…

    2025年12月24日
    000
  • CSS如何设置滚动条样式?CSS设置滚动条样式方法

    现在很多项目中都用到了滚动条,而且在有的时候,用到的是模拟滚动条,很多大型邮箱都是利用css样式来设置的,那么css如何设置滚动条样式?css如何设置滚动条样式方法有哪些? 一、webkit下面的CSS设置滚动条 上面是滚动条的主要几个设置属性,还有更详尽的CSS属性 :horizontal:水平方…

    2025年12月24日
    000
  • 网页添加CSS样式表的四种方法

    网页添加css样式表的四种方法,大家可以根据需要选择自己喜欢的方式。 一、使用STYLE属性: 将STYLE属性直接加在个别的元件标签里。 例如: 这种用法的优点 是可灵巧应用样式於各标签中,但是缺点则是没有整篇文件的『统一性』。 二、使用STYLE标签: 将样式规则写在…标签之中。 复…

    好文分享 2025年12月24日
    000
  • CSS布局自适应高度终极方法

    这篇文章主要介绍了关于CSS布局自适应高度终极方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 我们排版的最终目的是让程序员能快速绑定,最终的真实数据能和效果图一样,但是我们经常在国字型页面里面碰到左右两列的高度不确定,这样我们必须要把两列的自己适应,请看解决方法 ,每列高度(事先…

    好文分享 2025年12月24日
    000
  • 让div撑满整个屏幕的方法(css)

    这篇文章主要介绍了关于让div撑满整个屏幕的方法(css),有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 在body只有一个p的时候,可以通过这样的方式让p撑满整个屏幕。 1.给p设置定位。   复习一下——   css中position有五种属性:     static:默认值,没…

    好文分享 2025年12月24日
    000
  • 使用CSS给图片添加阴影的方法

    一般我们可以使用背景图的方式给图片添加阴影,但对于不固定尺寸的图片如何实现呢?我们可以采取“视觉欺骗大法”——定义渐变边框来实现: [code] on_all”> 一般我们可以使用背景图的方式给图片添加阴影,但对于不固定尺寸的图片如何实现呢?我们可以采取“视觉欺骗大法”——定义渐变…

    好文分享 2025年12月24日
    000
  • css实现圆角三角形的方法

    本文主要和大家介绍了css实现带圆角三角型的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 前言 目标实现效果图如下: 实现 .triangle{ display: inline-block; font-size: 0; overf…

    2025年12月24日 好文分享
    000
  • CSS有几种实现三栏布局的方法

    这次给大家带来CSS有几种实现三栏布局的方法,CSS实现三栏布局的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 其实不管是三栏布局还是两栏布局都是我们在平时项目里经常使用的,也许你不知道什么事三栏布局什么是两栏布局但实际已经在用,或许你知道三栏布局的一种或两种方法,但实际操作中也只会依赖那…

    好文分享 2025年12月24日
    000
  • CSS定制文本省略的方法

    这次给大家带来CSS定制文本省略的方法,CSS定制文本省略的注意事项有哪些,下面就是实战案例,一起来看一下。 WeTest导读 拿到设计MM的设计稿,Oh NO,点点点后面又双叒叕加内容了,弹丸之地,劳心费神啊!!可怜我们UI开发GG每次苦口婆心说,微臣不是不做,是办不到啊!很是愧疚。而现在,自从用…

    2025年12月24日 好文分享
    000
  • 常用的CSS实现垂直居中的4种方法

    这次给大家带来常用的CSS实现垂直居中的4种方法,CSS实现垂直居中的注意事项有哪些,下面就是实战案例,一起来看一下。 行高line-height实现单行文本垂直居中 以前一直认为单行文本垂直居中要将高度和行高设置成相同的值,但高度其实没必要设置。实际上,文本本身就在一行中居中显示。在不设置高度的情…

    2025年12月24日
    000
  • CSS用图换字多种方法

    这次给大家带来CSS用图换字多种方法,CSS用图换字的注意事项有哪些,下面就是实战案例,一起来看一下。 前面的话 CSS以图换字的技术,很久都没人提起了。它是一种在h1标签内,使用图像替换文本元素的技术,使页面在设计和可访问性之间达到平衡。本文将详细介绍CSS以图换字的9种方法 文字隐藏 在h1标签…

    好文分享 2025年12月24日
    000
  • CSS 垂直水平居中有哪几种方法

    这次给大家带来CSS 垂直水平居中有哪几种方法,CSS 垂直水平居中的注意事项有哪些,下面就是实战案例,一起来看一下。 CSS 居中对齐 代码中均省略了浏览器前缀 以下例子以我的个人的标准排序 当然也有更多的居中处理方法 但我觉得只有这5种方法是最完善的解决方案 flex 居中 优点:可对未知高度进…

    好文分享 2025年12月24日
    000
  • 清除css浮动的方法

    这次给大家带来清除css浮动的方法,清除css浮动的注意事项有哪些,下面就是实战案例,一起来看一下。 一,我们为什么要浮动 为什么浮动,为什么要清除浮动,以及清除浮动的方法。在网页布局的时候有时需要元素并排显示,如果不选择浮动,那么那些块状元素就会一行一行显示,占用空间不说,用户体验也是极为不好的。…

    2025年12月24日 好文分享
    000
  • 表格细边框的两种CSS实现方法

    在网页制作中,细边框这个制作方法是必不可少的。这里admin10000.com介绍2种常见的表格细边框制作方法,均通过XHTML验证。 表格细边框的两种CSS实现方法 /* 利用表格样式 border-collapse: collapse 实现细边框 */ .tab1 { width: 300px;…

    好文分享 2025年12月23日
    000
  • Java JDBC中SQL INSERT语句的常见语法错误及修复指南

    本文旨在解决java jdbc应用中常见的sql `insert`语句语法错误,特别是因缺少括号而导致的错误。我们将深入分析错误信息,指出问题根源,并提供正确的sql语句范例及java jdbc `preparedstatement`的使用方法。文章还将涵盖jdbc数据库操作的最佳实践、错误处理和调…

    2025年12月23日
    000
  • Servlet页面导航与用户认证:Redirect与Forward深度解析

    本文深入探讨了Java Servlet中实现页面导航的两种核心机制:客户端重定向(`sendRedirect`)和服务器端转发(`forward`)。通过一个实际的登录认证场景,详细阐述了它们的工作原理、适用场景及在用户认证、会话管理和Cookie处理中的应用,旨在帮助开发者构建结构清晰、功能完善的…

    2025年12月23日
    000
  • PHP表单提交防重复执行:理解与实践 $_POST 清除机制

    本文旨在解决php表单提交后,因页面刷新导致相关函数重复执行的问题。核心在于理解$_post数据的持久性。通过在函数执行完毕后立即使用unset($_post[‘key’])清除对应的$_post条目,可以有效确保功能仅在用户主动提交表单时执行一次,避免不必要的重复操作。 在…

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信