sql注入与转义的php函数代码
sql注入:
正常情况下:
delete.php?id=3;
$sql = 'delete from news where id = '.$_GET['id'];
恶意情况:
delete.php?id=3 or 1;
$sql = 'delete from news where id = 3 or 1'; -------如此执行后,所有的记录将都被删除
应该采取相关措施。。。比如用之前先判断是否是数字等等。
要使自己相信,从客户端传来的信息永远是不可靠的!!
转义:
有时候从客户端传来的数据,可能恶意包含些特殊的字符,比如单引号、斜杠等,所以需要转义,转义成普通的字符,此时就要用到string addslashes ( string $str ),这个函数可以对某个变量进行转义。,如果对数组里的元素进行转义,就用foreach循环数组,如下
foreach($_POST as $k=>$v) {
if(is_string($v)) {
$_POST[$k] = addslashes($v);
}
}
如果数组中还包含数组,那就要递归进行转义了,此时用到
array_walk_recursive(array &$input , callback $funame [, mixed $userdata ])
将用户自定义函数 funame 应用到 array 数组中的每个单元。本函数会递归到更深层的数组中去。典型情况下 funame 接受两个参数。input 参数的值作为第一个,键名作为第二个。如果提供了可选参数 userdata,将被作为第三个参数传递给 callback funame。成功时返回 TRUE, 或者在失败时返回 FALSE
也就是说用自定义的函数,至少要能接收两个参数,而addslashes()只能接收一个参数所以自定义一个函数如下:
function a(&$v,$k){
$v=addslashes($v);
}
array_walk_recursive(&$arr,'a');
系统自动转义:
PHP中,有一个魔术引号的概念,如何打开?答:在PHP.ini中,magic_quotes_gpc=On;重启apache即可
魔术引号被打开后,系统会自动对$_GET,$_POST,$_COOKIE数据进行转义,在不知情的情况下,进行手动转义的话,就转多了,要想合理的进行转义,就要判断,魔术符号是否已经打开了,用magic_quotes_gpc()进行判断,不需要传值,关闭返回0,关闭返回1
if(!get_magic_quotes_gpc()) { // 如果魔术引号没开
function _addslashes(&$v,$k) {
$v = addslashes($v);
}
array_walk_recursive(&$_GET,'_addslashes');
array_walk_recursive(&$_POST,'_addslashes');
array_walk_recursive(&$_COOKIE,'_addslashes');
}
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程