Dro*_*ans 13 ruby sql-injection tiny-tds
我试图弄清楚如何在将其交给执行之前对SQL字符串进行参数化,但遗憾的是我在互联网上发现了很多这样的信息:
sql = "SELECT * FROM table_name WHERE thing LIKE '%#{input}%'"
Run Code Online (Sandbox Code Playgroud)
这是一件坏事......但是,参数化sql查询可以在底层的Sequel库中找到,这就是TinyTDS的基础.所以我知道这是可能的.我只是很难搞清楚.
我真的想这可能是简单,只需这样:
@client = TinyTds::Client.new(
:adapter => 'sqlserver',
:host => host,
:database => db,
:username => username,
:password => password)
sql = "SELECT * FROM table_name WHERE thing LIKE ?"
safe_sql = @client.prepare(sql, input)
result = @client.execute(safe_sql)
Run Code Online (Sandbox Code Playgroud)
我似乎Dataset在源代码中找到了一个叫做类的东西,它有一个prepare方法.问题是,我该如何使用它?在将其交给对象中的execute()方法之前,是否需要创建另一个@client对象?我找不到一个initialize或一个new方法,所以简单的实例化似乎是错误的方法.
我使用 TinyTds 作为适配器实现了 Sequel gem。这允许您参数化 SQL 查询。请参阅下面的示例:
require "tiny_tds"
require 'sequel'
DB = Sequel.connect(
adapter: 'tinytds',
host: "dataserver",
database: "database",
user: "username",
password: "password"
)
Run Code Online (Sandbox Code Playgroud)
然后,我能够使用参数化的值创建 SQL 插入语句。
posts_table = DB[:posts]
posts_table.insert(:author => 'John Smith', :title => 'How to parametrize sql queries')
Run Code Online (Sandbox Code Playgroud)
我正在连接到 MS SQL 数据库。