Joomla!处理字符串过滤

Joomla!提供了一个静态类JRequest,它将直接过滤掉$_GET,$_POST,$_FILES,$_COOKIE与 $_REQUEST中有害的字符串。使用JRequest::getVar()获取值:

$id = JRequest::getVar('id');

也可以设定默认值,如果变量没有定义,直接使用默认值

$id = JRequest::getVar('id',0);

默认情况下JRequest::getVar() 从$_REQUEST中获取值。可以指定从任一传参类型中获取值:GET, POST, FILES, COOKIE, 与DEFAULT。如果指定DEFAULT或一个未知的传参类型,将会从$_REQUEST中读取。这是从$_POST中获取值:

$id = JRequest::getVar('id', 0, 'POST');

第四个可选参数指定了转换类型:

$id = JRequest::getVar('id', 0, 'POST', 'INT'); 

以下是转换类型说明:

转换类型 说明 其他简便方法
ALNUM 包含字母与数字的字符串;包括A-Z,a-z,0-9。 ————
ARRAY 数组。 ————
BASE64 Base64字符串;包括A-Z,a-z,0-9,正斜线,加号与等号。 ————
BOOL/?BOOLEAN Boolean?value. 布尔值。 getBool()
CMD 用作命令的字符串;包括?A-Z,a-z,0-9,下划线,句点,破折号。 getCmd()
FLOAT/?DOUBLE 浮点数字。 getFloat()
INT?/?INTEGER 整数。 getInt()
PATH 文件路径。 ————
STRING 字符串;将会尝试对任何特殊的字符解码。 getString()
WORD 没有空格的字符串;包括A-Z,a-z与下划线。 getWord()

根据表中的简便方法,转换浮点型可以这样使用:

$value = JRequest::getFloat('someValue');

有三种掩码(masks):JREQUEST_NOTRIM,JREQUEST_ALLOWHTML与 JREQUEST_ALLOWRAW

$name = JRequest::getVar('name', null, 'POST', 'STRING', 
JREQUEST_NOTRIM);
$name = JRequest::getString('name', null, 'POST', JREQUEST_NOTRIM);
输入值

<p>Paragraph<a?onClick="alert('foobar');">link</a></p>

输出值(无掩码)

Paragraphlink

输出值(JREQUEST_NOTRIM)

Paragraphlink

输出值(JREQUEST_ALLOWHTML)

<p>Paragraph<a>link</a></p>

输出值(JREQUEST_ALLOWRAW)

<p>Paragraph<aonClick="alert('foobar');">link</a></p>

?

输入值

CSS<linktype="text/css",href="http://somewhere/ nasty.css"?/>

输出值(无掩码)

CSS

输出值(JREQUEST_NOTRIM)

CSS

输出值(JREQUEST_ALLOWHTML)

CSS

输出值(JREQUEST_ALLOWRAW)

CSS<linktype="text/css",href="http://somewhere/ nasty.css"?/>

?

输入值

space?at?front?of?input

输出值(无掩码)

space?at?front?of?input

输出值(JREQUEST_NOTRIM)

space?at?front?of?input

输出值(JREQUEST_ALLOWHTML)

space?at?front?of?input

输出值(JREQUEST_ALLOWRAW)

space?at?front?of?input

?

输入值

&ltp> Para</p>

输出值(无掩码)

&ltp> Para</p>

输出值(JREQUEST_NOTRIM)

&ltp> Para</p>

输出值(JREQUEST_ALLOWHTML)

&ltp> Para</p>

输出值(JREQUEST_ALLOWRAW)

&ltp> Para</p>

使用JREQUEST_ALLOWHTML后,JavaScript与CSS被过滤掉了。这是因为他们存在一个安全隐患。利用这种类型的安全漏洞攻击被称为XSS(Cross Site Scripting跨站脚本攻击)攻击。如果想取回最初形式的数据,必须使用JREQUEST_ALLOWRAW。

posted on 2009-12-23 21:51  14的路  阅读(1015)  评论(0)    收藏  举报

导航

友情链接:源码下载