关于htmlenties的一些情况
来源:互联网 发布:人工智能的未来下载 编辑:程序博客网 时间:2024/05/20 14:19
源码:
<?php //error_reporting(0);$link = mysqli_connect('localhost', 'root', 'root', 'test');if (!$link) { die('Could not connect to MySQL: ' . mysqli_connect_error()); } $link->set_charset("utf8");function clean($str){ if(get_magic_quotes_gpc()){ $str=stripslashes($str); } return htmlentities($str, ENT_QUOTES);}$username = @clean((string)$_GET['username']);$password = @clean((string)$_GET['password']);$query='select * from user where username=\''.$username.'\' AND password=\''.$password.'\';';var_dump($query); //提示:htmlentities函数的效果可以通过右键查看网页源代码来看效果echo "<br />";$result=mysqli_query($link,$query);if(!$result || mysqli_num_rows($result) < 1){ die('Invalid password!');}$row = mysqli_fetch_assoc($result);echo "Hello ".$row['username']."</br>";echo "Your password is:".$row['password']."</br>";?>
首先看那个get_magic_quotes_gpc()函数,翻阅手册:
测试环境版本下magic_quotes_gpc就是关闭的了,所以我们输入的字符都会通过htmlentities转义后返回
由于源码在调用该函数时第二个参数设置为ENT_QUOTES,所以我们输入的引号和双引号都会被转义掉,无法进行引号闭合
这个时候也没有办法让这个函数转化成一个引号出来,这里就有点想不明白,以为是通过二次编码绕过去,然而事情并没有那么复杂
借鉴前人的经验,你会发现,该函数并没有对\进行过滤,所以只要把整个where条件进行闭合好了,如
这个时候SQL查询语句变成了select * from user where username='xxxxxxx' or 1;
不论前面where条件满不满足,or 1的话就相当于是select * from user;结果就会出来了
阅读全文
0 0
- 关于htmlenties的一些情况
- 关于KAL公司的一些情况
- 关于tuProlog的一些简单情况
- 转:关于仿真器的一些历史情况
- 关于阵列卡上的一些情况~~~~~
- 关于cornerStone无法提交的一些情况
- 关于面试需要了解公司的一些情况
- 一些公司的情况
- java的一些情况!
- 关于InstantiationException的情况...
- Ghost的一些异常情况
- kvm的一些配置情况
- 银行IT的一些情况
- C一些诡异的情况
- hadoop淘宝的一些情况
- floateActionButton的一些使用情况
- 关于C++子类在继承父类的构造函数时的一些情况
- 关于多线程情况下的生产者消费者模式的一些记录
- 我是一个线程
- 原始GPS坐标,火星坐标以及百度坐标的相互转换
- 机器学习and深度学习-->入坑书单资料整理下载
- redis保存数据的几种类型
- 装饰器
- 关于htmlenties的一些情况
- C语言中数组名与&数组名的区别
- cs231n assigment1 KNN部分代码运行结果及分析
- matlab之apiori
- 计算机网络复习笔记(一)
- 闭包中变量值的改变
- 要点提炼|开发艺术之View
- java之面向对象3
- uip协议栈移植的原理图、pcb、原理图库、pcb库