我正在尝试编写LIKE查询.
我读到纯字符串quires不安全,但我找不到任何解释如何编写安全的LIKE Hash Query的文档.
可能吗?我应该手动防御SQL注入吗?
在Rails中,当我想通过用户找到给定的值并避免SQL注入(转义撇号等)时,我可以这样做:
Post.all(:conditions => ['title = ?', params[:title]])
Run Code Online (Sandbox Code Playgroud)
我知道这样做的一种不安全的方式(可能的SQL注入)是这样的:
Post.all(:conditions => "title = #{params[:title]}")
Run Code Online (Sandbox Code Playgroud)
我的问题是,以下方法是否会阻止SQL注入?
Post.all(:conditions => {:title => params[:title]})
Run Code Online (Sandbox Code Playgroud) 这是一个我试图在rails中使用的activerecord查询
q = "Manchester"
b = "John Smith"
Model.find(:all, :conditions => ["city ? AND name like ?", q, b])
Run Code Online (Sandbox Code Playgroud)
但我在rails控制台中收到此错误
ActiveRecord :: StatementInvalid:SQLite3 :: SQLException:near"'Manchester'":语法错误:SELECT"model".*FROM"model"WHERE(城市'Manchester'和名称'John Smith')
请帮忙!
我正在使用Rails 3和MySQL数据库,我需要以编程方式创建这样的查询:
select * from table where category_name like '%category_name_1%'
OR category_name like '%category_name_2%'
(...snip...)
OR category_name like '%category_name_n%'
Run Code Online (Sandbox Code Playgroud)
鉴于表格大小和项目范围(我认为最多500行),我觉得使用像思考sphinx这样的东西会有点过分.我知道我可以通过直接编写查询字符串来完成此操作,但想知道是否有ActiveRecord方法来执行此操作.在官方指南中没有提到这一点,我现在谷歌搜索了很长一段时间,只是空手而归:(
另外,有没有理由(可能是Rails的原因?)不包含OR子句?
谢谢!
我能够在Rails 2.3中进行LIKE查询的唯一方法如下:
access_points.all(:conditions => "mac_address LIKE '%#{@q}%'")
Run Code Online (Sandbox Code Playgroud)
官方文档说这样做是不安全的,因为受SQL注入:
将自己的条件构建为纯字符串可能会使您容易受到SQL注入攻击.例如,Client.first(:conditions =>"name LIKE'%#{params [:name]}%'")不安全.有关使用数组处理条件的首选方法,请参阅下一节. http://guides.rubyonrails.org/v2.3.8/active_record_querying.html
但不幸的是,它没有解释如何正确地进行LIKE查询,而且我无法在谷歌上找到它,因为LIKE是如此通用的关键字.
任何提示?我是Rails的新手,但我有Symfony和Django的经验.
我是ROR开发的初学者.我有导航,我想在每个页面上搜索框,当我输入一些关键字时,它应该像在表格的字段中查询一样.我尝试使用一些在线教程,但无法做到.我的表名:这里的教程是导航栏上的搜索表单
<li><%= link_to 'Login', :controller => 'access', :action => 'login' %></li>
<li><%= link_to 'Sign Up', :controller => 'users', :action => 'new' %></li>
<li><%= link_to 'Logout', :controller => 'access', :action => 'logout' %></li>
<div align="right">
<%= form_tag("/search", method: "get") do %>
<%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Search") %>
<% end %>
</div>
Run Code Online (Sandbox Code Playgroud)
这是我的控制器
class SearchController < ApplicationController
def show
@tutorial = Tutorial.find(params[:q])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @tutorial }
end
end
end …Run Code Online (Sandbox Code Playgroud)