在安全方面,PESCMS连接数据库使用了PDO的预处理,彻底杜绝了SQL注入的问题。在获取外部变量的时候,可以直接使用$_GET或$_POST。但这样一来网站将存在XSS攻击的险情。为此,PESCMS提供了获取HTTP变量的方法。
获取$_GET或$_POST变量
PESCMS对于$_GET和$_POST,提供了 g() 和 p() 方法。下面对拿g()的参数进行说明
参数说明备注$nameHTTP变量名称必填$htmlentities 是否转义HTML标签 | 默认是Ture,即转义非必填
两者用法一样,仅名称存在差异。用法非常简单,下面的为在控制器中使用的用法演示
- $uid = $this->g('id'); //获取$_GET['id']的值并作了xss过滤。
- $content = $this->p('content'); //获取$_POST['content']的值并作了XSS过滤。
- $script = $this->p('footerCountScrtip', FALSE); //获取$_POST['footerCountScrtip']的值,但不过滤HTML标签
检查HTTP变量是否存在
我们经常需要检测用户输入的变量是否存在,为此PESCMS提供了封装好的方法: isG() 和 isP()。依旧以isG()说明:
参数说明备注$nameHTTP变量名称必填$message当检查不存在时,返回的提示信息必填$htmlentities 是否转义HTML标签 | 默认是Ture,即转义非必填
用法非常简单,依旧是控制器下使用:
- $uid = $this->isG('id', '请选择您要查看的用户'); //判断用户是否有提交$_GET['id']值,没有则弹出提示框。反之作xss过滤后赋值
- $script = $this->isP('footerCountScrtip', '请提交统计代码', FALSE)//判断用户是否有提交$_GET['id']值,没有则弹出提示框。反之不作xss过滤赋值
是不是非常简单?我相信大家现在能够安全地处理好用户提交数据了!
发表于 2018-05-14
明确的请求类型
在我的开发过程中,我发现有一些朋友对于处理HTTP变量选择偷懒性的方式:$_REQUEST 接收内容。在PESCMS中,并没有提供$_REQUEST函数的过滤,因此官方不推荐使用该变量进行获取HTTP变量。更重要一点的是,我们开发的功能肯定是明确表达请求类型的。若连自己的请求内容都不清楚,谈何开发呢?最后,若执意使用$_REQUEST获取HTTP变量,请自行编写相关过滤方法。