gpt4 book ai didi

orm - Symfony/Doctrine 中的 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-12-02 11:53:57 26 4
gpt4 key购买 nike

使用参数而不是直接将值放入查询字符串中是为了防止 SQL 注入(inject)攻击,并且应始终为 done :

... WHERE p.name > :name ...
->setParameter('name', 'edouardo')

这是否意味着,如果我们使用这样的参数,我们将始终免受 SQL 注入(inject)的侵害?在使用表格(FOS的注册表)时,我输入<b>eduardo</b>相反,它被保存到带有标签的数据库中。我真的不明白为什么使用参数可以防止 SQL 注入(inject)...

为什么标签会这样持久化到数据库中?有没有办法使用 Symfony 的验证组件删除标签?

在 Symfony 中将数据持久保存到数据库之前,我们是否应该使用一般技巧或方法?

最佳答案

从阅读 what's SQL injection 开始.

当放入 SQL 的值改变查询时,就会发生 SQL 注入(inject)攻击。结果,查询执行了它本来打算执行的其他操作。

示例将使用 edouardo' OR '1'='1 作为值,这将导致:

WHERE p.name > 'edouardo' OR '1'='1'

(因此条件始终为真)。

eduardo”是一个完全有效的值。在某些情况下,您需要将其保存为提交的状态(例如内容管理系统)。当然,当您从数据库中获取并直接输出时,它可能会破坏您的 HTML。这应该通过你的模板引擎来解决(twig 会自动转义它)。

如果您希望在将数据从表单传递到实体之前对其进行处理,请使用 data transformers .

关于orm - Symfony/Doctrine 中的 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11540302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com