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 |
?
| 输入值 |
<p> Para</p> |
| 输出值(无掩码) |
<p> Para</p> |
| 输出值(JREQUEST_NOTRIM) |
<p> Para</p> |
| 输出值(JREQUEST_ALLOWHTML) |
<p> Para</p> |
| 输出值(JREQUEST_ALLOWRAW) |
<p> Para</p> |
使用JREQUEST_ALLOWHTML后,JavaScript与CSS被过滤掉了。这是因为他们存在一个安全隐患。利用这种类型的安全漏洞攻击被称为XSS(Cross Site Scripting跨站脚本攻击)攻击。如果想取回最初形式的数据,必须使用JREQUEST_ALLOWRAW。
浙公网安备 33010602011771号