Fre*_*dyK 1 ruby sql sql-injection ruby-on-rails sinatra
string.sanitize是保护sql注入的最佳方法.
我们需要为它安装Sanitize gem还是有更好的方法?
value = "O'Brian"
value.sanitize =>"O\'Brian"
or
value.escape =>"O\'Brian"
Run Code Online (Sandbox Code Playgroud)
它可能默认包含在Rails 5中,但是如何使用sinatra.
为防止SQL注入,您应该准备好语句.关于所有高级数据库适配器提供使用和正确转义变量的功能.在ActiveRecord中,这看起来像这样:
value = "O'Brian"
Person.where(name: value).to_sql
# => "SELECT `people`.* FROM `people` WHERE `people`.`name` = 'O\\'Brian'"
Run Code Online (Sandbox Code Playgroud)
Sequel或DataMapper等其他数据库适配器具有类似的功能.
使用像pg或的普通数据库适配器时mysql2,可以在数据库级别使用普通的预准备语句.
使用mysql2,它看起来像这样:
value = "O'Brian"
statement = @client.prepare("SELECT * FROM people WHERE name = ?")
result = statement.execute(value)
Run Code Online (Sandbox Code Playgroud)
或者,所有适配器都提供数据库特定的字符串转义方法 但是你通常应该坚持使用准备好的语句,因为当你不试图推理逃逸时它们更安全,但是将所有这些都委托给一致地执行此操作的库.
作为关于sanitize方法和sanitizegem 的最后一点,它们不是用于转义SQL片段,并且在使用这种方式时不会使您免于SQL注入.sanitize gem用于确保HTML代码仅包含安全的白名单标签和属性.它与转义SQL无关,如果以这种方式使用将导致易受攻击的代码!
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |