★精品文档★
PHP登录中防止sql注入方法分析
防止sql注入这些细节问题一般是出现在大意程序员或者是新手程序员了他们未对用户提交过来的数据进行一些非常过滤从而导致给大家测试一下就攻破了你的数据库了下面我来简单的一个用户登录未进行安全配置可能出现的sql注入方法下面一起来看看吧。
比如以下一段登录的代码
代码如下:if($l =@mysql_connect(‘ localhost’ , ‘root’ , ‘123’)) ordie(‘数据库连接失败’);mysql_select_db(‘test’);mysq l_set_charset(‘utf8’);
$sql = ‘select * from test where username =“$username”and password=“$password”‘ ;
$res=mysq l_q u e ry($sq l);if(mysq l_n u m_rows($res)){header(‘Location: ./home.php’);
}else{die(‘输入有误’);
}
注意上面的sql语句存在很大的安全隐患如果使用以下万能密码和万能用户名那么可以轻松进入页面
1/5
★精品文档★
代码如下:
1 . $sql= ‘select * from test where username = “***”and password=“***”or 1 =“1”‘ ;
很明显针对这条sql语句的万能密码是: ***”or 1 =“1
代码如下:
2. $sql = ‘select * from test where username =“***”union select *from users/*and password=“***”‘ ;
正斜线*表示后面的不执行mysql支持union联合查询所以直接查询出所有数据;所以针对这条sql语句的万能用户名是 ***”union select *from users/*
但是此注入只针对代码中的sql语句如果
代码如下:
$sql = “select * from test where username =$username and password=$password”;
上面的注入至少已经不管用了不过方法是一样的;
在使用PDO之后 sql注入完全可以被避免而且在这个快速开发的时代框架横行已然不用过多考虑sql注入问题了。
下面整理了两个防止sql注册函数
代码如下:
/*过滤所有GET过来变量*/foreach ($_GET as$get_key=>$get_var)
2/5
★精品文档★
{if (is_numeric($get_var)) {
$get[strtolower($get_key)]=get_int($get_var);}else{
$get[strtolower($get_key)]=get_str($get_var);}
}
/*过滤所有POST过来的变量*/foreach ($_POST as$post_key=>$post_var){if (is_numeric($post_var)) {
$post[strtolower($post_key)]=get_int($post_var);}else{
$post[strtolower($post_key)]=get_str($post_var);}
}
/*过滤函数*/
//整型过滤函数function get_int($number)
{return intval($number);
}
3/5
★精品文档★
//字符串型过滤函数function get_str($string)
{if (!get_magic_quotes_gpc()) {return addslashes($string);
}return$string;
}
还有一些博客会这样写
代码如下:
<?phpfunction post_check($post)
{if(!get_magic_quotes_gpc()) //判断magic_quotes_gpc是否为打开
{
$post = addslashes($post); //进行magic_quotes_gpc没有打开的情况对提交数据的过滤
}
$post=str_replace(“_”, “ _”,$post); //把‘_’过滤掉$post=str_replace(“%”, “ %”,$post); //把’%‘过滤掉$post=nl2br($post); //回车转换
4/5
★精品文档★
$post=htmlspecialchars($post); //html标记转换return$post;
}
?
5/5
今天下午遇到一个网友聊到他昨天新注册的一个域名,今天在去使用的时候发现域名居然不见。开始怀疑他昨天是否付款扣费,以及是否有实名认证过,毕竟我们在国内域名注册平台注册域名是需要实名认证的,大概3-5天内如果不验证那是不可以使用的。但是如果注册完毕的域名找不到那也是奇怪。同时我也有怀疑他是不是忘记记错账户。毕竟我们有很多朋友在某个商家注册很多账户,有时候自己都忘记是用哪个账户的。但是我们去找账户也不办...
georgedatacenter这次其实是两个促销,一是促销一款特价洛杉矶E3-1220 V5独服,性价比其实最高;另外还促销三款特价vps,georgedatacenter是一家成立于2019年的美国VPS商家,主营美国洛杉矶、芝加哥、达拉斯、新泽西、西雅图机房的VPS、邮件服务器和托管独立服务器业务。georgedatacenter的VPS采用KVM和VMware虚拟化,可以选择windows...
LOCVPS发来了针对元旦新年的促销活动,除了全场VPS主机8折优惠外,针对德国/荷兰KVM #1/美国KVM#2 VPS提供终身7折优惠码(限量50名,先到先得)。LOCVPS是一家成立于2012年的国人VPS服务商,提供中国香港、韩国、美国、日本、新加坡、德国、荷兰、俄罗斯等地区VPS服务器,基于KVM或XEN架构(推荐优先选择KVM),均选择直连或者优化线路,国内延迟低,适合建站或远程办公使...