【问题标题】:Joomla: correct way to sanitize file dataJoomla:清理文件数据的正确方法
【发布时间】:2013-09-10 07:39:58
【问题描述】:

我正在从 csv 文件编写导入脚本,我需要验证数据,大部分数据是字符串,所以我想使用 Jinput 之类的东西来清理它。

Joomla 是否已经为此目的提供了一些东西?

最好有类似的东西

$field = JSanitizer::get($data/*array with data*/, "fieldname"/*name of field*/, 
    'string'/*type of data*/, 'null'/*default value*/);

我还需要它同时在 Joomla 2.5 和 3.0 版本中工作。

【问题讨论】:

    标签: php joomla joomla2.5


    【解决方案1】:

    您可能正在寻找JFilterInput::clean() 这将按如下方式工作:

    $field = JFilterInput::clean($data[$fieldname], 'filter');
    

    这并没有提供设置默认值的方法,因此您必须在之后进行处理。如果您编写自定义组件,这应该与通常使用 JInput 以及 JForm 元素完成的过滤相同。

    我似乎找不到所有过滤器的好列表,但您可以在此处查看旧版本的源代码:http://docs.joomla.org/API16:JFilterInput/clean。该函数的最新版本从第 162 行开始:https://github.com/joomla/joomla-cms/blob/master/libraries/joomla/filter/input.php

    还请注意,您希望自己将字段从数据数组中拉出。您实际上可以在没有过滤器设置的情况下将整个数组发送给它,它至少应该检查整个数组是否存在 XSS 和其他问题。如果您想对整数等进行更细微的过滤,最好逐个字段进行。

    【讨论】:

    • 谢谢,这几乎正是我所搜索的。
    • 这会生成有关使用非静态方法 Joomla 3.7.9 的警告。按照下面汤姆的帖子使用它。
    【解决方案2】:
    $field = JFilterInput::clean($data[$fieldname], 'filter');
    

    将发出通知 “不应静态调用非静态方法 JFilterInput::clean()” 您应该首先使用 JFilterInput::getInstance() 启动它并动态调用它,例如:

    $field = JFilterInput::getInstance()->clean($data[$fieldname], 'filter');
    

    汤姆

    【讨论】:

      【解决方案3】:

      您应该阅读Joomla docs 并在解析文件之前使用类似的内容:
      $string = JRequest::getString( 'description' );
      这应该适用于自 1.5 以来的所有版本

      有一些 github 项目将html purifier 实现为插件,我找到了this,但没有机会测试它,但它应该可以工作。

      【讨论】:

      • JRequest 用于从请求中检索数据,我正在解析由文件上传的 csv 数据,因此我需要其他可以接受带有数据的数组或单个变量进行清理的其他东西。
      • 而且在 Joomla 2.5 中 JRequest 已被弃用,应使用 Jinput 代替。
      猜你喜欢
      • 2021-12-27
      • 2021-04-23
      • 2018-06-19
      • 2012-11-03
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 2019-02-14
      • 2019-05-20
      相关资源
      最近更新 更多