While I can certainly see the advantages of using parameters for SQL queries, especially when dealing with datetimes and things like that, I'm still unsure about parameters as the only way to prevent SQL injection.
The fact is, I inherited an application and it has things like
"SELECT Field FROM Table WHERE Filter='"+userinput.Replace("'", "''")+"'"
all over the place. Now while those doesn't look very pleasant to my eyes, and I wouldn't mind rewriting them, my question is, do I need to? Try as I might, I can't see a way to perform SQL injection with this.
No, it is not enough. It will do in a pinch, but it is a very weak alternative, and using parameterized queries or parameterized stored procedures is better, if your platform and/or RDBMS support either feature.
From
OWASP's SQL Injection Prevention Cheat Sheet
...this methodology is frail compared to using parameterized queries. This technique should only be used, with caution, to retrofit legacy code in a cost effective way.
There are more below
SQL injection — but why isn't escape quotes safe anymore?
Sql Injection Myths and Fallacies
SQL Injection after removing all single-quotes and dash-characters
Yes, .Replace("'", "''")
stops SQL injection to the same degree that parameterization does.
There is still double or reflective injection. For example, you can store
'; delete from orders'
in a comment field. If part of the database uses the comment field in dynamic SQL, it might run the delete instead.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With