php 中防注入的函数,怎么写,或者思路是啥 php 中防注入的函数,怎么写,或者思路是啥 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果没有get_magic_quotes_gpc(){ addslashes()//$_GET, $_POST, $_COOKIE, $_REQUEST .每一个变量,数组要遍历}mysql_escape_string//这两个也可以转义,让sql语句安全mysql_real_escape_string 一般防注入的方法,是把所有的用户输入强制转成SQL语句中的字符串,也就是在用户的输入前后加''。PHP已经有现成的防注入函数,比如:对应mysqli->query的mysqli->bind_param 那如果把get_magic_quotes_gpc打开,既不会存在注入了吗? 那如果把get_magic_quotes_gpc打开,既不会存在注入了吗?================================为了代码健壮,程序上还是要判断,如果没打开,则代码处理一下。函数名,最后三个字应该就是GET POST COOKIE的首字母复制一个手册上的例子。<?phpecho get_magic_quotes_gpc(); // 1echo $_POST['lastname']; // O\'reillyecho addslashes($_POST['lastname']); // O\\\'reillyif (!get_magic_quotes_gpc()) { $lastname = addslashes($_POST['lastname']);} else { $lastname = $_POST['lastname'];}echo $lastname; // O\'reilly$sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";?> 如果自己写,写成递归形式比较好。要对每一个变量都处理一遍 addslashes 是转义一下那与这种手工处理,有什么优缺点呢 +++++sql语句里也全部:where id='$id' and name='$name'就始终跑不出''的范围了 原理就是通过增加sql语句的条件来实现的,比如一条查询语句,它的条件是变量$a,而这个变量$a又是通过用户给的(例如表单传值、url传值),这样就实现了sql的注入,如下:$uid = $_POST['uid'];$sql = 'select username, password, email from table_users where uid = '.$uid;如果POST的uid是一个整数1(假如),那么上面的sql语句如下:$sql = 'select username, password, email from table_users where uid = 1';如果POST的uid是一个带有注入含义的字符串(uid类型如果是int那么直接就形成了注入)或者是i'.' or 1(假如),那么上面的sql语句如下:$sql = 'select username, password, email from table_users where uid = 1'.' or 1';为了防止sql注入,你需要将特殊字符进行转义(用\转义,请用相关php相关方法,如addslashes)以上是我个人见解 //替换字符串的特殊符号或SQL关键字 function dowith_sql($str) { $str = str_replace("and","",$str); $str = str_replace("execute","",$str); $str = str_replace("update","",$str); $str = str_replace("count","",$str); $str = str_replace("chr","",$str); $str = str_replace("mid","",$str); $str = str_replace("master","",$str); $str = str_replace("truncate","",$str); $str = str_replace("char","",$str); $str = str_replace("declare","",$str); $str = str_replace("select","",$str); $str = str_replace("create","",$str); $str = str_replace("delete","",$str); $str = str_replace("insert","",$str); $str = str_replace("'","",$str); $str = str_replace('"',"",$str); $str = str_replace(" ","",$str); $str = str_replace("or","",$str); $str = str_replace("=","",$str); $str = str_replace("%20","",$str); return $str; } 大家帮我看一下这个php写mysql是那里出了问题? smarty中foreach排版问题 在线等!!!!!!!!!!!! php 如何获取一个时间的毫秒时间类似js的Date.UTC函数 IIS下如何搭建php环境? 求助,用php 与ajax 怎能作出一个公共聊天室? php和cookie的问题!在先等 讨论:关于PHP+MYSQL处理高并发请求及海量数据的问题. php封装amf数据,发送post 哪里有便宜的PHP虚拟主机? 帮忙看PHP函数。 关于在PHP中插入变量的问题 关于图片存储的问题
{
addslashes()//$_GET, $_POST, $_COOKIE, $_REQUEST .每一个变量,数组要遍历
}mysql_escape_string//这两个也可以转义,让sql语句安全mysql_real_escape_string
PHP已经有现成的防注入函数,比如:对应mysqli->query的mysqli->bind_param
为了代码健壮,程序上还是要判断,如果没打开,则代码处理一下。函数名,最后三个字应该就是GET POST COOKIE的首字母复制一个手册上的例子。
<?php
echo get_magic_quotes_gpc(); // 1
echo $_POST['lastname']; // O\'reilly
echo addslashes($_POST['lastname']); // O\\\'reillyif (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} else {
$lastname = $_POST['lastname'];
}echo $lastname; // O\'reilly
$sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";
?> 如果自己写,写成递归形式比较好。要对每一个变量都处理一遍
+++++sql语句里也全部:where id='$id' and name='$name'就始终跑不出''的范围了
$sql = 'select username, password, email from table_users where uid = '.$uid;如果POST的uid是一个整数1(假如),那么上面的sql语句如下:$sql = 'select username, password, email from table_users where uid = 1';如果POST的uid是一个带有注入含义的字符串(uid类型如果是int那么直接就形成了注入)或者是i'.' or 1(假如),那么上面的sql语句如下:$sql = 'select username, password, email from table_users where uid = 1'.' or 1';
为了防止sql注入,你需要将特殊字符进行转义(用\转义,请用相关php相关方法,如addslashes)以上是我个人见解
//替换字符串的特殊符号或SQL关键字
function dowith_sql($str)
{
$str = str_replace("and","",$str);
$str = str_replace("execute","",$str);
$str = str_replace("update","",$str);
$str = str_replace("count","",$str);
$str = str_replace("chr","",$str);
$str = str_replace("mid","",$str);
$str = str_replace("master","",$str);
$str = str_replace("truncate","",$str);
$str = str_replace("char","",$str);
$str = str_replace("declare","",$str);
$str = str_replace("select","",$str);
$str = str_replace("create","",$str);
$str = str_replace("delete","",$str);
$str = str_replace("insert","",$str);
$str = str_replace("'","",$str);
$str = str_replace('"',"",$str);
$str = str_replace(" ","",$str);
$str = str_replace("or","",$str);
$str = str_replace("=","",$str);
$str = str_replace("%20","",$str);
return $str;
}