使用php函数防止SQL注入方法
什么是SQL注入?
SQL注入是指在你系统防御之外,某人将一段Mysql语句注入到你的数据库。注入通常发生在系统要求用户输入数据的时候,比如用户名的输入,用户可能输入的不是一个用户名,而是一段SQL语句,这个语句可能就会不知不觉地运行在你的数据库中。
SQL注入实例
$name = $_POST['username'];$query="SELECT * FROM `tbl_name` WHERE `name`='$name' ";如同你看到的,用户输入的值会通过url参数分配给变量$name,然后直接放置到sql语句中。这意味着用户是有可能编辑sql语句的。
$name = "admin' OR 1=1 -- ";$query="SELECT * FROM `tbl_name` WHERE `name`='$name' ";这个问题已经被知道了一段时间,PHP有一个特制的功能以防止这些攻击。所有你需要做的就是使用一个函数mysql_real_escape_string()。
mysql_real_escape_string所做的是把一个输入的字符串,在MySQL查询时将它处理为用户输入的真实字符串,来防止SQL注入。有点绕,基本上,就是将用户输入可能引起Mysql安全隐患的字符串比如单引号('),用逃脱引用来表示\ '。
将这个函数应用到上面那个可能被注入的例子中:
$name = mysql_real_escape_string($_POST['username']);$query = "SELECT * FROM `tbl_name` WHERE `name` = '$name' ";还没连接直接使用这个函数会报错。上面经过函数转化后,$query最后打印出来的语句为:
也就是说上面那个admin后面的单引号(')被转义为真实的输入字符,不再和admin前的字符进行匹配,admin前的单引号将和字符串–后面的单引号进行匹配。
让我们创建一个通用的函数,你可以用任何名字来命名它,在这里,我要将它命名为"mres":
function mres($var){ if (get_magic_quotes_gpc()){ $var = stripslashes(trim($var)); } return mysql_real_escape_string(trim($var));}$name = mres($_POST['username']);$query="SELECT * FROM `tbl_name` WHERE `name`='$name' ";使用php函数防止SQL注入方法的更多相关文章
- sql注入方法以及防范
sql注入方法: 1.数字注入 ; get请求 www.bobo.com?id=1 可以查出 ID等于1的一条数据. 如果有人在链接后面增加 www.bobo.com?id=1 or 1=1 / w ...
- 另类的SQL注入方法
前言:相比基于查询的SQL注入,使用insert.update和delete进行SQL注入显得略显另类 参考自:http://www.exploit-db.com/wp-content/themes/ ...
- PHP mysql_real_escape_string() 函数防SQL注入
PHP MySQL 函数 定义和用法 mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符. 下列字符受影响: \x00 \n \r \ ' &quo ...
- ref:web 防止SQL注入方法
ref:https://blog.csdn.net/beidou321/article/details/6482618 小结:spring采用JdbcTemplate来操作sql,一般不要自行拼接sq ...
- PHP最全防止sql注入方法
(1)mysql_real_escape_string -- 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集 使用方法如下: $sql = "select count ...
- 防止SQL注入方法总结
一.参数化SQL 是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,用@来表示参数. 在使用参数化查询的情况下,数据库服务器不会将参数的内容视为 ...
- 网站防止SQL注入方法
方法:所有获取GET.POST变量都先进行过滤: 字符串-- htmlspecialchars(addslashes($string)) addslashes() 函数返回在预定义字符之前添加反斜杠 ...
- 防止sql注入方法 如何防止java中将MySQL的数据库验证密码加上 ' or '1'= '1 就可以出现万能密码 的PreparedStatement
package com.swift; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepar ...
- 防sql注入方法
mysql_escape_string(strip_tags($arr)) /** * 函数名称:post_check() * 函数作用:对提交的编辑内容进行处理 * 参 数:$post: 要提交的内 ...
随机推荐
- Wpf DataGrid动态添加列,行数据(二)
这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...
- 字符串format()方法的基本使用
<模板字符串>.format(<逗号分隔的参数>) 其中,模板字符串是一个由字符串和槽组成的字符串,用来控制字符串和变量的显示效果.槽用大括号({})表示,对应format() ...
- In Java, how can I test if an Array contains a certain value?
public static final String[] VALUES = newString[]{"AB","BC","CD"," ...
- 【转载】浅析从外部访问 Kubernetes 集群中应用的几种方式
一般情况下,Kubernetes 的 Cluster Network 是属于私有网络,只能在 Cluster Network 内部才能访问部署的应用.那么如何才能将 Kubernetes 集群中的应用 ...
- LeetCode 1123. Lowest Common Ancestor of Deepest Leaves
原题链接在这里:https://leetcode.com/problems/lowest-common-ancestor-of-deepest-leaves/ 题目: Given a rooted b ...
- 关于时间排序在ios中失效的处理方法
上个月公司做项目的时候在列表排序的时候产品加了一个需求,通过点击量,发布时间,评论量进行筛选的一个需求. 一开始在电脑上测试基本没问题,然后我也就放下了这个按耐不住的小心脏,然后在完成所有模块后 sh ...
- react-native-cli运行项目及打包apk失败的解决过程
刚开始学习react native,第一步自然是搭建好开发环境,node及jdk本身就有,Python2.Android studio以及Android sdk的安装倒是没什么大问题,按照官网的教程做 ...
- 深度学习之TCN网络
论文链接:https://arxiv.org/pdf/1803.01271.pdf TCN(Temporal Convolutional Networks) TCN特点: 可实现接收任意长度的输入序列 ...
- 区间dp提升复习
区间\(dp\)提升复习 不得不说这波题真的不简单... 技巧总结: 1.有时候转移可以利用背包累和 2.如果遇到类似区间添加限制的题可以直接把限制扔在区间上,每次只考虑\([l,r]\)被\([i, ...
- es6引用模块import后面加上花括号{}和不加花括号的区别
在使用import语法引用模块时,如何正确使用{} 例如:有两个文件,home.js.user.js 当需要在home.js中引入user.js的时候 //home.js import user fr ...