如何在整个应用程序中清理 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)
在我们的 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)