php manual(11)
时间:2007-07-19 来源:skilldream
第十二章 数据安全
1,使用Sanitize
Cake使用Sanitize来避免用户提交的恶意请求或者其他不希望的结果。Sanitize是一个核心库,所以你可以在代码的任何地方使用,但是最好还是在controllers或者models中使用
// 实现包含这个库文件
uses('sanitize');
// 接下来,创建一个Sanitize对象
$mrClean = new Sanitize();
//下面你可以使用Sanitize来检测数据,具体方法下一节介绍
2.在SQL和HTML中使数据安全
本节主要介绍如何用Sanitize提供的方法
●paranoid($string, $allowed = array())
$badString = ";:@@#";
echo $mrClean->paranoid($badString);
// output: scripthtml
echo $mrClean->paranoid($badString, array(' ', '@'));
// output: scripthtml @@
●html($string, $remove = false)
$badString = 'HEY
';
echo $mrClean->html($badString);
// output: HEY
/font><script>
</script>
echo $mrClean->html($badString, true);
// output: font size=99 color=#FF0000 HEY fontscript
script
●sql($string)
添加/号使得SQL语句是小,/号取决于用户系统当前的magic_quotes_gpc设定
●cleanArray(&$toClean)
第十三章 cake的session组件
cake存数session有三种方法:临时文件,php机制,数据库实现。默认情况下,cake使用php机制。如果使用临时文件或者是数据库,请在/app/config/core.php文件中修改CAKE_SESSION_SAVE成为cake,php,database三种之一。
/**
* CakePHP includes 3 types of session saves database or file. Set this to your preferred method.
* If you want to use your own save handler place it in app/config/name.php
*DO NOT USE file or database as the name. and use just the name portion below. *
* Setting this to cake will save files to /cakedistro/tmp directory
* Setting it to php will use the php default save path Setting it to database will use the database
*/
define('CAKE_SESSION_SAVE', 'php');
如果要使用数据库来存储session,可以在数据库中创建一个新的表,表的结构可以在/app/config/sql/sessions.sql找到
2. 使用cake的session组件
Cake seesion组件用来和session信息交互,包括基本的session的读写操作,同时也包括一些利用session表示信息的一些特性。如果你想使用session组件,确定有如下代码
class SomeController extends AppController
{
var $components = array('Session');
}
下面是一些你可能使用的方法
●check($name)
○检查一下当前$name确定的key是否设置到session中
●del($name) and delete($name)
○删除$name确定的session
●error()
○返回最近的错误
●flash($key = 'flash')
○返回最新的使用setFlash()的信息,如果$key设置了,那么返回的是$key存储的信息●read($name = null)
○读$name确定的session
●renew()
○重新创建当前活跃的session,删除旧的id,并创建新的id,并将就的session值传递给新的session中
●setFlash($flashMessage, $layout = 'default', $params = array(), $key = 'flash')
○将$flashMessage中的message写入到session(或者待会儿被flash()取走),如果$layout设置成default,消息将会存储为''.$flashMessage.''.如果设置为空, 消息将按照传递过来的样子存储。传递过来的信息将在Cake View中按照$layout存储起来。●valid()
○如果session可得,则返回true
●write($name, $value)
○将$name和$value确定的变量写入到当前活跃的session中
第十四章 处理请求组件(the request handler component)
1. 介绍
Request Handler组件用来监测HTTP请求的信息。你可以使用它在controller中更好的了解ajax请求,得到远程客户端的ip以及请求的类型,或者过滤掉不想要的信息,使用这个组件,你需要确定它在controller的$componets数组中,如下
class ThingsController extends AppController
{
var $components = array('RequestHandler');
//
}
2. 得到客户端或者请求信息
●getAjaxVersion()
○返回version
●getClientIP ()
○返回客户端ip
●getReferrer ()
○返回服务器名称
●isAjax()
○返回当前请求是否是XMLHttpRequest
●isGet()
○返回是否通过GET方法
●isMobile()
○返回是否移动浏览器
●isPost()
○返回是否是Post方法
●isPut()
○返回是否是Put方法
3. 过滤掉数据
有些情况下,你想要将请求或者输出中删除掉一些数据。
●stripAll($str)
○过滤掉空格,图像,脚本
●stripImages($str)
○过滤掉图像
●stripScripts($str)
○过滤掉脚本
●stripTags($str, $tag1, $tag2, $tag3...)
○过滤掉标签
$someString = 'Foo Bar';
echo $this->RequestHandler->stripTags($someString, 'font', 'bold');
// output: Foo BarstripWhitespace($str)
●stripWhitespace($str)
○过滤掉空格
4. 其他有用的方法
当用户请求中含有ajax请求,Request Handler组件就十分有用。setAjax()方法用来自动检测Ajax求情,并且设置controller的layout到请求的ajax layout。
// list.thtml
ul>
foreach ($things as $thing):?>
li>php echo $thing;?>li>
endforeach;?>
ul>
//-------------------------------------------------------------
//The list action of my ThingsController:
function list()
{
$this->RequestHandler->setAjax();
$this->set('things', $this->Thing->findAll());
相关阅读 更多 +
排行榜 更多 +