如何防止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

相关推荐

  • php查询代码怎么写_php数据库查询语句编写技巧与实例

    在PHP中进行数据库查询,最常用的方式是使用MySQLi或PDO扩展连接MySQL数据库。下面介绍基本的查询代码写法、编写技巧以及实用示例,帮助你高效安全地操作数据库。 1. 使用MySQLi进行查询(面向对象方式) 这是较为推荐的方式,适合大多数中小型项目。 // 创建连接$host = ‘loc…

    2025年12月6日 后端开发
    000
  • PHP与MySQL:精确筛选当日提醒记录的教程

    本教程旨在解决php与mysql应用中,如何精确筛选并展示当日提醒记录的问题。文章详细阐述了修改sql查询条件和php日期格式化的关键步骤。通过将比较运算符从“大于”改为“等于”,并确保日期字符串只包含年-月-日信息,开发者可以有效解决查询结果包含未来记录的困扰,确保只显示当前日期的相关数据。 在开…

    2025年12月6日 后端开发
    000
  • php数据库如何构建搜索功能 php数据库商品搜索的实现案例

    答案:通过HTML表单提交关键词,PHP使用PDO预处理语句对MySQL商品表执行模糊查询,结合LIKE或FULLTEXT索引实现安全高效的商品搜索,并展示匹配结果。 在PHP项目中实现商品搜索功能,核心是结合前端表单与后端数据库查询。以MySQL为例,通过用户输入关键词,动态构造SQL语句,从商品…

    2025年12月6日 后端开发
    000
  • 快速祛除老年斑的有效方法(教你简单又快速消除老年斑的养肤秘诀)

    随着年龄的增长,老年斑通常出现在面部、颈部和手背等暴露部位,给人们的外貌带来困扰。它是一种常见的皮肤问题,让人看起来显老。为帮助您恢复年轻健康的肌肤,php小编子墨整理了一些有效祛除老年斑的方法。本文将分享快速简单的养肤秘诀,帮助您快速消除老年斑。 1.积极保护皮肤免受紫外线伤害的重要性 所以避免长…

    2025年12月5日
    000
  • 颈椎压迫神经的缓解方法(舒缓颈椎压迫神经的有效措施和建议)

    颈椎压迫神经是一种常见的健康问题,会导致颈部疼痛、麻木和肌肉无力。随着人们关注缓解颈椎压迫神经的方法,本文将提供一些经过验证的策略。php小编西瓜在这里将探讨这些缓解方法,帮助读者更好地应对这一问题。通过了解这些技巧,读者可以减轻颈部疼痛,改善神经功能,从而提高他们的整体健康和生活质量。 段落 1.…

    2025年12月5日
    000
  • ThinkPHP的安全机制是什么?ThinkPHP如何防止SQL注入?

    thinkphp通过参数绑定、配置安全措施及输入过滤机制防止sql注入等安全问题。1. 参数绑定:使用where()或bind()方法将数据与sql语句分离,防止恶意代码执行;2. 配置安全:关闭调试模式、验证上传文件、定期更新框架、限制数据库权限、使用https;3. 输入过滤:默认使用htmls…

    2025年12月5日 PHP框架
    000
  • php如何执行sql查询语句_php执行sql查询语句的增删改查操作示例

    PHP通过PDO扩展连接数据库并执行SQL语句,实现增删改查操作。1. 使用PDO连接数据库,设置异常模式;2. 用prepare和execute插入数据,获取最后插入ID;3. 通过query执行查询,遍历结果集;4. 使用预处理语句更新记录,返回影响行数;5. 预处理删除指定ID数据,输出删除数…

    2025年12月4日
    000
  • 文件超过七天失效恢复方法(如何恢复超过七天失效的文件)

    在数字化时代,文件已成为我们不可或缺的一部分。 不幸的是,我们有时可能会丢失或删除宝贵的文件,而这些文件超过七天,无法通过回收站恢复。当这种情况发生时,您该如何恢复超过七天失效的文件?别担心,本文将为您提供一些实用的方法和技巧。php小编子墨将引导您了解如何找到专业的数据恢复软件、使用免费的数据恢复…

    2025年12月4日
    000
  • 如何防止SQL注入攻击?预处理语句安全实践指南

    防止sql注入的关键在于使用预处理语句并遵循安全实践。1. 使用参数化查询,避免手动拼接sql语句;2. 绑定用户输入而非直接拼接,确保输入不会被当作sql执行;3. 注意orm框架中是否启用参数化查询;4. 避免动态拼接列名或表名,采用白名单校验;5. 正确处理in子句等特殊场景,依据数据库支持方…

    2025年12月4日 后端开发
    000
  • 如何选择手机膜,保护你的手机屏幕(选购手机膜的几大要点与技巧)

    随着智能手机的普及,手机膜已成为必不可少的配件,可以保护手机屏幕,延长其使用寿命。但市面上的手机膜琳琅满目,如何选择一款最适合自己的手机膜呢?php小编柚子将为您介绍选购手机膜的几大要点与技巧,帮助您避免踩坑,选出最适合的手机膜。 了解手机膜的材质及类型 PET膜,TPU等、手机膜有多种材质,包括钢…

    2025年12月3日
    000
  • 火影忍者手游须佐佐助口令兑换码

    火影忍者手游中,须佐佐助口令兑换码的获取与兑换%ignore_a_2%如下。 1、 火影忍者手游中,须佐佐助口令活动将在7月9日至7月23日进行。 2、 正确口令:忍界压路机(123456、须佐佐助辣条哥、须佐欧皇等)。 快剪辑 国内⼀体化视频⽣产平台 54 查看详情 以上就是火影忍者手游须佐佐助口…

    2025年12月3日 软件教程
    000
  • 四六级学籍照片上传方法

    如何上传四六级学籍照片 1、 首先,打开微信,进入城市服务公众号,如图所示。 2、 接着,在公众号的菜单栏底部找到便民服务,然后在弹出的窗口中点击微信版面,按照下图的操作步骤进行。 快剪辑 国内⼀体化视频⽣产平台 54 查看详情 3、 在办理业务的过程中选择学籍身份,随后上传学籍照片,具体位置如图所…

    2025年12月3日 软件教程
    000
  • 简述sql注入工作原理 sql注入原理简要说明

    sql注入是一种通过在输入字段注入恶意sql代码来操纵数据库查询的攻击方式。其原理是利用应用程序未正确处理用户输入,使得恶意sql语句被执行。防范方法包括:1)使用参数化查询,2)进行输入验证,3)实施输出编码。理解并应用这些措施是保障系统安全的关键。 SQL注入是一种常见的网络攻击方式,黑客通过在…

    2025年12月3日 数据库
    000
  • SQL注入的常见攻击方式和案例分析

    sql注入的常见攻击方式包括输入框注入、url参数注入和盲注,经典案例有2009年的twitter和2012年的yahoo!voices攻击。防范措施包括使用参数化查询、orm工具、限制数据库权限和定期更新。 你想知道SQL注入的常见攻击方式和案例分析?这确实是一个非常重要的话题,尤其是在网络安全领…

    2025年12月3日 数据库
    000
  • CodeIgniter数据库操作怎么写_CodeIgniter数据库CRUD指南

    CodeIgniter数据库操作核心是Query Builder,它通过方法链实现增删改查,提升代码可读性和开发效率。首先需正确配置database.php中的连接参数,加载数据库后可用insert()插入数据,insert_batch()批量插入;get()和get_where()读取数据,支持s…

    2025年12月3日
    000
  • SQL注入如何利用数据库权限?最小权限原则的实现

    数据库权限决定SQL注入危害程度,遵循最小权限原则可有效降低风险。通过使用参数化查询、限制用户权限、禁用高危功能、定期审查权限等措施,可防止攻击者读取敏感数据、执行任意代码或控制数据库。实际中应为应用创建低权限专用账户,仅授予必要操作权限,并将高权限操作交由独立管理工具或存储过程处理,避免长期赋予过…

    2025年12月3日 数据库
    000
  • 什么是SQL注入漏洞?如何通过参数化查询修复它

    最有效修复SQL注入的方法是使用参数化查询,它通过占位符将用户输入作为纯数据处理,防止恶意SQL执行。例如在Python中用cursor.execute(“SELECT * FROM users WHERE username = ? AND password = ?”, (u…

    2025年12月3日 数据库
    000
  • SQL注入如何影响API安全?保护API端点的策略

    SQL注入直接威胁API的数据完整性与机密性,攻击者通过构造恶意SQL语句绕过认证、窃取或篡改数据,甚至控制数据库;防御需以前端验证提示、后端严格校验为基础,核心采用参数化查询隔离SQL结构与数据,结合最小权限原则、WAF防护、日志监控、错误信息屏蔽及依赖更新等多层策略,构建系统化防护体系。 SQL…

    2025年12月3日 数据库
    000
  • SQLServer插入特殊字符怎么转义_SQLServer特殊字符转义插入

    使用参数化查询可解决SQL Server中特殊字符转义问题并防止SQL注入,推荐通过参数传递数据而非拼接SQL,同时注意单引号、反斜杠等字符的手动转义及编码一致性。 插入SQL Server数据库时遇到特殊字符转义问题,通常是因为这些字符与SQL语法冲突。核心在于使用正确的转义方法,确保数据被正确解…

    2025年12月3日 数据库
    000
  • SQLite中如何插入多条数据_SQLite批量插入数据方法

    批量插入数据可显著提升SQLite性能。1. 使用事务(BEGIN TRANSACTION…COMMIT)减少数据库交互,确保数据一致性;2. 通过INSERT INTO … SELECT从查询结果批量插入,适用于静态或跨表数据迁移;3. 在Python中使用executem…

    2025年12月3日 数据库
    000

发表回复

登录后才能评论
关注微信