Problem: Is the following approach SQL injection safe?
I have five filter fields and would like to be able to ask 2**5 = 32
different WHERE clauses with LIKE conditions.
If it is safe, can it be improved or simplified?
...
cond = ""
cond += AddCond("flight like", "%", @report.flight,
"%")
cond += AddCond("description like", "%",
@report.description, "%")
cond += AddCond("users.name <http://users.name> like",
"%", @report.pilot,
"%")
cond += AddCond("flightdate >=", "", @report.fromdate,
"")
cond += AddCond("flightdate <=", "", @report.todate,
"")
if cond=="" then
@reports = Report.find(:all)
else
@reports = Report.find(:all,
:conditions => "1=1" + cond,
:joins => "INNER JOIN Users ON Reports.user_id = Users.id
<http://Users.id>
")
end
...
def AddCond(query, prefix, value, suffix)
if value.nil? then
""
elsif value == "" then
""
else
" and " + query + " " + Report.quote(prefix + value +
suffix)
end
end
_______________________________________________
Rails mailing list
Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org
http://lists.rubyonrails.org/mailman/listinfo/rails
Problem: Is the following approach SQL injection safe?
I have five filter fields and would like to be able to ask 2**5 = 32
different WHERE clauses with LIKE conditions.
If it is safe, can it be improved or simplified?
...
cond = ""
cond += AddCond("flight like", "%", @report.flight,
"%")
cond += AddCond("description like", "%",
@report.description, "%")
cond += AddCond("users.name <http://users.name> like",
"%", @report.pilot,
"%")
cond += AddCond("flightdate >=", "", @report.fromdate,
"")
cond += AddCond("flightdate <=", "", @report.todate,
"")
if cond=="" then
@reports = Report.find(:all)
else
@reports = Report.find(:all,
:conditions => "1=1" + cond,
:joins => "INNER JOIN Users ON Reports.user_id = Users.id
<http://Users.id>
")
end
...
def AddCond(query, prefix, value, suffix)
if value.nil? then
""
elsif value == "" then
""
else
" and " + query + " " + Report.quote(prefix + value +
suffix)
end
end
_______________________________________________
Rails mailing list
Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org
http://lists.rubyonrails.org/mailman/listinfo/rails
Christian Szell: Is it safe?... Is it safe?
     Babe: You''re talking to me?
     Christian Szell: Is it safe?
     Babe: Is what safe?
     Christian Szell: Is it safe?
     Babe: I don''t know what you mean. I can''t tell you
something''s safe or not, unless I know specifically
           what you''re talking about.
     Christian Szell: Is it safe?
     Babe: Tell me what the "it" refers to.
     Christian Szell: Is it safe?
     Babe: Yes, it''s safe, it''s very safe, it''s so
safe you wouldn''t believe it.
     Christian Szell: Is it safe?
     Babe: No. It''s not safe, it''s... very dangerous, be
careful.
Now that I got that out of my system, yes, as long as you call
''quote''
(as you are) you should be fine.
# i would have written it this way
def AddCond(query, prefix, value, suffix)
    return if value.blank?
    " and #{query) #{prefix}#{Report.quote(value)}#{suffix}"
end
NILSSON Christer wrote:
> Problem: Is the following approach SQL injection safe?
> 
> I have five filter fields and would like to be able to ask 2**5 = 32
> different WHERE clauses with LIKE conditions.
> 
> If it is safe, can it be improved or simplified?
> 
> ...
> 
>    cond = ""
>    cond += AddCond("flight like", "%", @report.flight,
"%")
>    cond += AddCond("description like", "%",
@report.description , "%")
>    cond += AddCond("users.name <http://users.name> like",
"%",
> @report.pilot, "%")
>    cond += AddCond("flightdate >=", "",
@report.fromdate , "")
>    cond += AddCond("flightdate <=", "",
@report.todate, "")
> 
>    if cond=="" then
>      @reports = Report.find(:all)
>    else
>      @reports = Report.find (:all,
>        :conditions => "1=1" + cond,
>        :joins => "INNER JOIN Users ON Reports.user_id = Users.id 
> <http://Users.id>")
>    end
> 
> ...
> 
> def AddCond(query, prefix, value, suffix)
>    if value.nil? then
>      ""
>    elsif value == "" then
>      ""
>    else
>      " and " + query + " " + Report.quote(prefix +
value + suffix)
>    end
> end
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Rails mailing list
> Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org
> http://lists.rubyonrails.org/mailman/listinfo/rails