我目前正在修复 CakePHP 3 应用程序。我遇到过一些允许将标签插入数据库的文本字段,这将允许用户对系统中的其他用户执行 XSS 攻击。
我提出了以下规则来应用于受影响的表对象中存在此问题的字段,以防止将 html 添加到数据库中:
public function validationDefault(Validator $validator)
{
...
$validator
->add('description', 'validFormat', [
'rule' => array('custom', '/^[a-z0-9 ]*$/i'),
'message' => 'Input must not contain special characters.'
]);
...
}
然而,这有点限制,不允许在软件的大量实际用例中使用标点符号和特殊字符。
我想实现一个规则,为用户提供最大的灵活性,将文本写入此描述字段,但阻止他们输入能够利用 XSS 漏洞的代码。
这样做的正确规则是什么?这似乎是 Cake 中的常见用例,框架中是否有一个预先存在的规则可以在不使用正则表达式的情况下执行此操作?
我知道将这些字段的输出打印为纯文本是处理此问题的另一种解决方案,我也打算这样做。尽管我也希望数据在输入端也能正确格式化。
蝴蝶不菲