I have problem with field named "name" that if we enter improper value
like salil's system get crashed. it gives error Mysql::Error: You have
an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 's' and
parent_id= 21) LIMIT 1 at line 1: SELECT * FROM `categories` WHERE
(name='salil's' and parent_id= 21) LIMIT 1
how to avoid that i wwant either of this two
1] user cannot create category with special characters like ' , < >
2] if user enter name with special characteres system shouldn't get
crashed for any situation.
Please see documentation for “h” (html escape) and “sanitize” in rails documentation - might be of some help. From Rails 3, I hear, html will be escaped automatically. Also see this: http://railspikes.com/2008/1/28/auto-escaping-html-with-rails
I have problem with field named "name" that if we enter improper value
like salil's system get crashed. it gives error Mysql::Error: You have
an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 's' and
parent_id= 21) LIMIT 1 at line 1: SELECT * FROM `categories` WHERE
(name='salil's' and parent_id= 21) LIMIT 1
What does the code that generated this sql look like?
You'll want to look up the documentation for :conditions in
ActiveRecord::Base. My guess is that the code you're using inserts
parameters directly into a SQL fragment, which is bad bad bad.
Category.find(:first, :conditions=>["name= ? and "+query, self.name ])
Maybe you typed this wrong, but using the string "name =? and" + query
still looks BAD to me. If "query" could possible contain any user input
then it is still not sanitized against SQL Injection.
When the following form is used:
:conditions => ["name = ? and parent_id = ?", a, b]
Rails will sanitize a and b while substituting them for the ?
placeholders.
Rails also properly sanitizes when using hashes for the :conditions:
:conditions => { :name => a, :parent_id => b }
Rule of thumb: Never directly concatenate to a SQL fragment when there
is any possibility that user provided input might be involved.