我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL注入的防御方法有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL注入的防御方法有哪些

这篇文章主要介绍了SQL注入的防御方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQL注入的防御方法有哪些文章都会有所收获,下面我们一起来看看吧。

限制数据类型

在传入参数的地方限制参数的类型,比如整型 Integer,随后加入函数判断,如is_numeric($_GET[‘id’]) 只有当get到的id为数字或者数字字符时才能执行下一步,限制了字字符自然就限制了注入,毕竟构造参数怎么可能不传入字符。但这种方法存在一定的限制,只能在特定的页面才能使用,一般大部分都是要求我们传入的字符串,但可以很大程度限制整型注入的情况。(针对此函数也是有一定绕过手段,比如转为十六进制)

正则表达式匹配传入参数

相信对于正则表达式大家都不陌生了,几乎在过滤比较严格的地方都有正则表达式。(后面我也会写一篇关于使用正则表达式的文章,包括基础的使用和绕过)。这里简单解读一下这段正则表达式:

$id=$_POST['id'];if (preg_match('/and|select|insert|insert|update|[A-Za-z]|/d+:/i', $id)) {         die('stop hacking!');     } else {        echo 'good';     }

preg_match() 函数匹配传入的id值,
/ 作为正则的起始标识符
| 代表或
[A-Za-z] 表示匹配参数中是否存在大小写的26个字符
/d 匹配是否存在数字
+匹配一次或多次
/i 不区分大小写

像下面这句:

?id=1’ union select 1,2# 因为匹配到union select,输出 stop hacking!

正则表达式也具有一定危险性,在SQL注入绕过waf中谈到过,正则表达式匹配非常消耗性能,因此攻击时可以构造大量的正常语句‘骗’过服务器,当后台对数据的处理达到最大限制时就会放弃匹配后面我们构造的非法语句,从而略过这个数据包。

函数过滤转义

在php中最基本的就是自带的magic_quotes_gpc函数,用于处理 ’ " 符号加上/ 防止转义, 比如:

 ?id=1' and 1=1#  ===> ?id=1/' and 1=1#

另外还有addslashes(),也具有相同的效果。

像前面提到的**preg_match()**函数结合正则表达式或者黑名单也具有预防效果。

小tips:默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

mysql_escape_string($string):用反斜杠转义字符串中的特殊字符,用于mysql_query()查询。
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
转义的符号包括 \x00 \n \r \ ’ " \x1a

预编译语句

预编译语句对现在的程序员来说基本都会去设计使用的方法,保障数据库的安全。一般来说,防御SQL注入的最佳方式就是使用预编译语句,绑定变量。

String query="select password from users where username='?' ";

下面讲一下什么叫预编译:使用预编译相当于是将数据于代码分离的方式,把传入的参数绑定为一个变量,用?表示,攻击者无法改变SQL的结构,在这个例子中,即使攻击者插入类似 admin’ or 1=1# 的字符串,如果不做处理直接带入查询,那么query则变成了

query="select password from users where username='admin' or 1=1 ";

闭合了后面的引号,从而执行了恶意代码。而预编译则是将传入的 admin’ or 1=1# 当做纯字符串的形式作为username执行,避免了上面说到的SQL语句中的拼接闭合查询语句等过程,可以理解为字符串与sql语句的关系区分开,username此时作为字符串不会被当做之前的SQL语句被带入数据库执行,避免了类似sql语句拼接、闭合等非法操作。就相当于拿着这个字符串去数据库中找有没有这个东西一样。并且使用预编译的SQL语句,SQL语句的语义不会发生改变。

下面给个php绑定变量的事例:

$query="INSERT INTO myCity (Name,CountryCode,District) VALUES (?,?,?)";$stmt=$mysqli->prepare($query);$stmt->bind_param("sss",$val1,$val2,$val3);$val1="Stuttgart";$val2="DEU";$val3="Baden";//execute the statement$stmt->execute();

以上谈到的四种方法都是一些基本方法,具体怎么实现防御还要看怎么去设计。说到预编译语句是最佳方式,并不是说只是使用这一种方法就能够防止SQL注入,而实际上预编译也存在注入绕过的问题,并且也不是所有的地方都能够使用预编译语句。最佳的方式应该是多种方法结合,使用预编译的同时还要加上其他函数过滤,正则匹配等,更多的还有根据实际情况自定义函数确保安全。

关于“SQL注入的防御方法有哪些”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“SQL注入的防御方法有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL注入的防御方法有哪些

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

下载Word文档

猜你喜欢

SQL注入的防御方法有哪些

这篇文章主要介绍了SQL注入的防御方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQL注入的防御方法有哪些文章都会有所收获,下面我们一起来看看吧。限制数据类型在传入参数的地方限制参数的类型,比如整型
2023-07-02

jdbc防止sql注入的方法有哪些

使用PreparedStatement来执行SQL语句,而不是Statement。PreparedStatement使用占位符来代替参数值,可以防止SQL注入攻击。对用户输入的数据进行合法性验证和过滤,只允许特定的字符或格式。使用ORM框架
jdbc防止sql注入的方法有哪些
2024-04-09

php防止sql注入的方法有哪些

PHP防范SQL注入攻击指南本文提供了PHP中防止SQL注入攻击的有效方法,包括数据过滤、参数化查询、白名单验证、输入验证、数据库权限限制、其他安全措施以及持续监视和审计。这些最佳实践可帮助PHP开发人员创建更安全的Web应用程序,保护用户数据和系统免受恶意活动的影响。
php防止sql注入的方法有哪些
2024-04-10

php防止sql注入的方法有哪些

1. 使用预处理语句和绑定参数:使用PDO或mysqli扩展来执行SQL查询,使用预处理语句和绑定参数的方式来防止SQL注入。预处理语句可以确保用户输入的数据不会被解释为SQL语句的一部分,而参数绑定可以防止恶意的SQL注入攻击。2. 输入
2023-08-23

sql注入攻击的防范方法有哪些

今天小编给大家分享一下sql注入攻击的防范方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
2022-12-27

Java 中防止 SQL 注入的方式都有哪些?(java防止sql注入的方式有哪些)

在Java开发中,SQL注入是一种常见的安全漏洞,它可能导致敏感数据泄露、数据库损坏甚至整个系统的安全受到威胁。为了防止SQL注入,开发者可以采取多种方式。以下是一些常见的防止SQL注入的方法:一、使用参数化查询(PreparedStatement
Java 中防止 SQL 注入的方式都有哪些?(java防止sql注入的方式有哪些)
Javasql2024-12-17

SQL注入的四种防御方法总结

目录前言限制数据类型正则表达式匹配传入参数函数过滤转义预编译语句总结前言最近了解到安全公司的面试中都问到了很多关于SQL注入的一些原理和注入类型的问题,甚至是SQL注入的防御方法。SQL注入真的算是web漏洞中的元老了,著名且危害性极大。
2022-07-11

java防止sql注入的方式有哪些

Java防止SQL注入的方式有以下几种:1. 使用参数化查询(Prepared Statement):使用PreparedStatement接口来执行SQL语句,通过将参数与SQL语句分开,使得SQL注入攻击无法成功。示例代码:```jav
2023-08-23

java防止sql注入的方式有哪些

预防SQL注入至关重要,可保护敏感数据免遭未经授权的访问和篡改。有效的方法包括:参数化查询:用占位符替换输入,阻止恶意代码注入。输入验证:检查输入有效性,拒绝无效值。转义特殊字符:确保特殊字符被视为文本,而非SQL代码。使用白名单:限制输入到已知安全值列表内。使用ORM框架:自动化参数化查询和输入验证。使用安全库:提供SQL注入防护机制。遵循安全编码实践:编写健壮代码,使用适当错误处理。定期进行安全性审查:识别和修复潜在漏洞。教育和培训:提高安全意识。部署Web应用程序防火墙:过滤和监视网络流量,检测和阻
java防止sql注入的方式有哪些
2024-04-13

SQL注入漏洞的检测及防御方法

SQL注入(SQL Injection)是一种广泛存在于Web应用程序中的严重安全漏洞,它允许攻击者在不得到授权的情况下访问、修改或删除数据库中的数据。这是一种常见的攻击方式,因此数据库开发者、Web开发者和安全专业人员需要了解它,以采取措

防止web项目中的SQL注入方法有哪些

这篇文章主要介绍“防止web项目中的SQL注入方法有哪些”,在日常操作中,相信很多人在防止web项目中的SQL注入方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”防止web项目中的SQL注入方法有哪些
2023-06-21

Java SQL 注入的修复方法有哪些?(java sql注入的修复方法有哪些)

在Java开发中,SQL注入是一种常见的安全漏洞,它可能导致敏感数据泄露、数据库被篡改甚至整个系统的崩溃。因此,了解并掌握JavaSQL注入的修复方法是非常重要的。一、什么是SQL注入?SQL注入是指攻击者通过
Java SQL 注入的修复方法有哪些?(java sql注入的修复方法有哪些)
Java2024-12-17

ddos防御的方法有哪些

这篇文章主要讲解了“ddos防御的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ddos防御的方法有哪些”吧!对于ddos防护的了解:抵挡ddos是一个体系工程,想仅仅依托某种体系
2023-06-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录