amashigeseiji / viewvalue
CakePHP 的 ViewValue 插件
0.9.0
2015-06-22 18:05 UTC
Requires
- php: >=5.5
This package is auto-updated.
Last update: 2024-09-08 18:01:16 UTC
README
此插件可以让您的 CakePHP 应用程序通过自动转义 View 变量来防止 XSS 注入。
需求
- PHP >= 5.5
- CakePHP >= 2.6
设置
在 Config/bootstrap.php
#Load ViewValue plugin CakePlugin::load('ViewValue');
以及 Controller/AppController.php
public $helpers = array('ViewValue.ViewValue');
注意
如果变量已经通过在视图文件中使用 h()
辅助函数进行转义,则应删除 h()
。
这可能会导致双重转义。
描述
此插件将类型为 String
/Array
/Object
的 View 变量转换为 StringViewValue
/ArrayViewValue
/ObjectViewValue
的实例。
它们将按照其原始变量类型执行。
如果需要,您可以在视图文件中通过调用 raw()
方法来获取原始值。
示例代码
StringViewValue
作用与字符串相同。
#Controller/SampleController.php public function index() { $this->set('xssstr', '<script>alert(0)</script>'); }
<!-- View/Smaple/index.ctp --> <?php echo $xssstr; ?> <!-- <script>alert(0)</script> (display correctly in browser) --> <?php echo $xssstr->raw(); ?> <!-- <script>alert(0)</script> (script is triggered) -->
而 ArrayViewValue
作用与数组相同。
#Controller/SampleController.php public function index() { $this->set('arr', array('<script>alert(0)</script>', 'hoge', array('fuga', array('hoge', 'fuga')))); }
<!-- View/Smaple/index.ctp --> <?php echo $arr[0]; ?> <!-- <script>alert(0)</script> (display correctly in browser) --> <?php var_dump($arr instanceof ArrayViewValue) ?> <!-- true --> <?php var_dump($arr[0] instanceof StringViewValue) ?> <!-- true --> <!-- `$arr[0]` is converted to `StringViewValue`. --> <?php var_dump($arr[2][1] instanceof ArrayViewValue) ?> <!-- true --> <!-- The value of any hierarchy will be converted into BaseViewValue inheritance. --> <!-- off course you can use foreach --> <?php foreach ($arr as $val) { echo $val; } ?>