iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SQL注入的防御方法有哪些
  • 358
分享到

SQL注入的防御方法有哪些

2023-07-02 17:07:31 358人浏览 薄情痞子
摘要

这篇文章主要介绍了sql注入的防御方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇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注入的防御方法有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: SQL注入的防御方法有哪些

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

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

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

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

下载Word文档
猜你喜欢
  • SQL注入的防御方法有哪些
    这篇文章主要介绍了SQL注入的防御方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQL注入的防御方法有哪些文章都会有所收获,下面我们一起来看看吧。限制数据类型在传入参数的地方限制参数的类型,比如整型 ...
    99+
    2023-07-02
  • 防范sql注入的方法有哪些
    这篇文章主要介绍防范sql注入的方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!防止SQL注入的方式有:执行sql语句时使用addslashes进行sql语句转换,过滤掉sq...
    99+
    2024-04-02
  • 防止SQL注入的方法有哪些
    防止SQL注入的方法有:采用PreparedStatement进行预编译,sql语句在执行的过程中效率比Statement要高,例如:String sql = "select* from users where...
    99+
    2024-04-02
  • sql注入漏洞防御措施有哪些
    sql注入漏洞防御措施有:对输入进行严格的转义和过滤,例如://转义示例function escape($link, $data){if(is_ string($data)){return mysql...
    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
  • 防御SQL注入的方法是怎样的
    本篇文章给大家分享的是有关防御SQL注入的方法是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SQL 注入是一类危害极大的攻击形式。虽然...
    99+
    2024-04-02
  • sql注入攻击的防范方法有哪些
    今天小编给大家分享一下sql注入攻击的防范方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2022-12-27
    sql
  • 浅谈SQL注入的四种防御方法
    最近了解到安全公司的面试中都问到了很多关于SQL注入的一些原理和注入类型的问题,甚至是SQL注入的防御方法。SQL注入真的算是web漏洞中的元老了,著名且危害性极大。下面这里就简单的分享一下我总结的四...
    99+
    2023-09-05
    php web安全
  • 防止sql注入的方式有哪些
    这篇文章主要讲解了“防止sql注入的方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“防止sql注入的方式有哪些”吧!  防止SQL注入的方式有:执行...
    99+
    2024-04-02
  • java防止sql注入的方式有哪些
    Java防止SQL注入的方式有以下几种:1. 使用参数化查询(Prepared Statement):使用PreparedState...
    99+
    2023-08-23
    java sql
  • 怎么防御SQL注入
    这篇文章主要介绍怎么防御SQL注入,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段...
    99+
    2024-04-02
  • 防止web项目中的SQL注入方法有哪些
    这篇文章主要介绍“防止web项目中的SQL注入方法有哪些”,在日常操作中,相信很多人在防止web项目中的SQL注入方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”防止web项目中的SQL注入方法有哪些...
    99+
    2023-06-21
  • ddos防御的方法有哪些
    这篇文章主要讲解了“ddos防御的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ddos防御的方法有哪些”吧!对于ddos防护的了解:抵挡ddos是一个体系工程,想仅仅依托某种体系...
    99+
    2023-06-07
  • 防止sql注入的方法有哪几种
    防止SQL注入的方法有哪几种,需要具体代码示例 SQL注入是一种常见的网络安全威胁,它可以让攻击者通过构造恶意的输入来修改、删除或者泄露数据库中的数据。为了有效防止SQL注入攻击,开发...
    99+
    2024-02-22
    参数化查询 输入验证和过滤 使用orm框架 防止sql注入
  • php sql注入的方法有哪些
    SQL注入是一种常见的网络安全漏洞,攻击者利用此漏洞可以执行恶意SQL语句,从而获取敏感数据或者对数据库进行修改。以下是一些常见的P...
    99+
    2023-08-23
    php sql
  • php防止sql注入的方法有哪几种
    使用预处理语句:使用PDO或者MySQLi等数据库扩展,可以通过绑定参数的方式来执行SQL语句,从而避免SQL注入攻击。 进...
    99+
    2024-04-29
    php sql
  • sql注入防范措施有哪些
    SQL注入是一种常见的网络攻击方式,为了防范SQL注入攻击,可以采取以下措施:1. 输入验证:对用户输入的数据进行严格的验证,确保输...
    99+
    2023-09-05
    sql
  • 高防服务器防御的方法有哪些
    使用防火墙进行网络流量过滤,阻止恶意攻击流量进入服务器。 配置安全策略,限制访问权限,只允许特定IP地址或端口访问服务器。 ...
    99+
    2024-04-09
    高防服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作