gpt4 book ai didi

sql - String.sanitize 是在 rails 或 sinatra 应用程序中防止 SQL 注入(inject)的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:21:34 25 4
gpt4 key购买 nike

string.sanitize 是防止 sql 注入(inject)的最佳方法。

我们是否需要为其安装 Sanitize gem或者有更好的方法吗?

value = "O'Brian"
value.sanitize =>"O\'Brian"
or
value.escape =>"O\'Brian"

它可能默认包含在 Rails 5 中,但是使用 sinatra 会怎样。

最佳答案

为了防止 SQL 注入(inject),您应该使用准备好的语句。关于所有高级数据库适配器都提供使用和正确转义变量的功能。在 ActiveRecord 中,这看起来像这样:

value = "O'Brian"
Person.where(name: value).to_sql
# => "SELECT `people`.* FROM `people` WHERE `people`.`name` = 'O\\'Brian'"

Sequel 或 DataMapper 等其他数据库适配器具有类似的功能。

当使用像 pgmysql2 这样的普通数据库适配器时,您可以在数据库级别使用普通的准备语句。

对于 mysql2,这看起来像这样:

value = "O'Brian"
statement = @client.prepare("SELECT * FROM people WHERE name = ?")
result = statement.execute(value)

或者,所有适配器都提供特定于数据库的字符串转义方法。但是您通常应该坚持使用准备好的语句,因为当您只是不尝试推理转义而是将所有这些委托(delegate)给始终如一地执行此操作的库时,使用它们会更安全。

作为关于 sanitize 方法和 sanitize gem 的最后说明,它们不打算用于转义 SQL 片段并且不会保存你从 SQL 注入(inject)时那样使用。 sanitize gem 用于确保 HTML 代码仅包含安全的白名单标签和属性。它与转义 SQL 无关,如果以这种方式使用将导致易受攻击的代码!

关于sql - String.sanitize 是在 rails 或 sinatra 应用程序中防止 SQL 注入(inject)的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35750919/

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