如何在整个应用程序中清理 Cakephp3 中的用户输入

How to sanitize user input in Cakephp3 through out the application

在我们的 Cakephp3 应用程序中,用户正在输入一些带有撇号的文本,应该使用反斜杠或使用 mysql_real_escape_string () 我们应该处理以覆盖站点中抛出的错误。

这个修复应该在一个唯一的地方完成,而不是在所有地方都被处理。

最好的方法是什么? 谢谢

我建议你在 marshall 之前在你的桌子上放一张 str_replace。

如果所有表都需要这样做,我建议您将 before marshall 放在 Table.php 并将其扩展到您的其他表

应该是这样的:

在table.php:

public function beforeMarshal(Event $event, ArrayObject $data, 
ArrayObject $options)
{
    foreach ($data as $key => $value) {
        if (is_string($value)) {
            $data[$key] = str_replace("'","`",$value);
        }
    }
}

其他牌桌:

class YourTableNameTable extends Table

阅读以下内容:https://book.cakephp.org/3.0/en/orm/saving-data.html#modifying-request-data-before-building-entities

也许我重新发明了轮子,但 cake 提供了正确保存和显示用户尝试 "inject" 的任何数据的方法。

在一般情况下,如果用户想将他的昵称保存为 105; DROP TABLE users<script>location.href="pornhub"</script> - 你应该允许他使用那个昵称,如果你使用标准模型 - 没有办法注入任何事物。当您尝试在布局中显示用户数据时,只需使用 h($user->nickname)