放牧代码和思想
专注自然语言处理、机器学习算法

不被BAE支持的函数之set_magic_quotes_runtime

set_magic_quotes_runtime是用来自动给字串加转义符的,BAE封禁了这个函数。那么BAE默认的设置是什么呢?来用get_magic_quotes_runtime()试试吧!

<?php
/***************************************************************************
 * 
 * Copyright (c) 2011 Baidu.com, Inc. All Rights Reserved
 * 
 * 
 **************************************************************************/
 
/**
 * @file index.php
 * @author 
 * @date 
 * @version $Revision$ 
 * @brief 
 */
 
echo "Hello, BAE world!<br>";
echo get_magic_quotes_gpc();
 
?>

输出:

Hello, BAE world!
0

看来BAE默认的设置是不自动转义。大家的BAE应用可要小心注入喽。

关于set_magic_quotes_runtime的详细用法:

在php的配置文件中,有个布尔值的设置,就是magic_quotes_runtime,当它打开时,php的大部分函数自动的给从外部引入的(包括数据库或者文件)数据中的溢出字符加上反斜线。

当然如果重复给溢出字符加反斜线,那么字符串中就会有多个反斜线,所以这时就要用set_magic_quotes_runtime()与get_magic_quotes_runtime()设置和检测php.ini文件中magic_quotes_runtime状态。

为了使自己的程序不管服务器是什么设置都能正常执行。可以在程序开始用get_magic_quotes_runtime检测该设置的状态决定是否要手工处理,或者在开始(或不需要自动转义的时候)用set_magic_quotes_runtime(0)关掉该设置。magic_quotes_gpc设置是否自动为GPC(get,post,cookie)传来的数据中的\'\"\\加上反斜线。

可以用get_magic_quotes_gpc()检测系统设置。如果没有打开这项设置,可以使用addslashes()函数添加,它的功能就是给数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(\')、双引号(\")、反斜线(\\)与 NUL(NULL 字符)。

一般用法如下;

if(!get_magic_quotes_gpc())

{

   addslashes($prot);

}

set_magic_quotes_runtime 用来设置php.ini文件中的magic_quotes_runtime值,当遇到反斜杆(\)、单引号(')、双引号(")这样一些的字符定入到数据库里,又不想被过滤掉,使用这个函数,将会自动加上一个反斜杆(\),保护系统和数据库的安全。

magic_quotes_runtime 是php.ini里的环境配置变量,0和false表示关闭本功能,1和true表示打开本功能。当magic_quotes_runtime打开时,所有外部引入的数据库资料或者文件等都会自动转为含有反斜线溢出的资料,

设置方法如下:

1、可以直接在php.ini里面设置为ON

2、set_magic_quotes_runtime(true)或者set_magic_quotes_runtime(1)

3、用ini_set函数,ini_set(magic_quotes_runtime,1);

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » 不被BAE支持的函数之set_magic_quotes_runtime

分享到:更多 ()

评论 欢迎留言

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机