This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org
Difference between revisions of "Query Parameterization Cheat Sheet"
m |
(→Parameterized Query Examples) |
||
Line 22: | Line 22: | ||
| Java - Hibernate | | Java - Hibernate | ||
| | | | ||
+ | //HQL | ||
Query safeHQLQuery = session.createQuery("from Inventory where productID=:productid"); | Query safeHQLQuery = session.createQuery("from Inventory where productID=:productid"); | ||
safeHQLQuery.setParameter("productid", userSuppliedParameter); | safeHQLQuery.setParameter("productid", userSuppliedParameter); | ||
+ | |||
+ | //Criteria API | ||
+ | String userSuppliedParameter = request.getParameter("Product-Description"); // This should REALLY be validated too | ||
+ | // perform input validation to detect attacks | ||
+ | Inventory inv = (Inventory) session.createCriteria(Inventory.class).add(Restrictions.eq("productDescription", userSuppliedParameter)).uniqueResult(); | ||
|- | |- | ||
| .NET/C# | | .NET/C# |
Revision as of 15:05, 10 February 2014
Introduction
SQL Injection is one of the most dangerous web vulnerabilities. So much so that it's the #1 item in the OWASP Top 10. It represents a serious threat because SQL Injection allows evil attacker code to change the structure of a web application's SQL statement in a way that can steal data, modify data, or potentially facilitate command injection to the underlying OS. This cheat sheet is a derivative work of the SQL Injection Prevention Cheat Sheet.
Parameterized Query Examples
SQL Injection is best prevented through the use of parameterized queries. The following chart demonstrates, with real-world code samples, how to build parameterized queries in most of the common web languages. The purpose of these code samples is to demonstrate to the web developer how to avoid SQL Injection when building database queries within an web application.
Language - Library | Parameterized Query |
---|---|
Java - Standard |
String custname = request.getParameter("customerName"); String query = "SELECT account_balance FROM user_data WHERE user_name = ? "; PreparedStatement pstmt = connection.prepareStatement( query ); pstmt.setString( 1, custname); ResultSet results = pstmt.executeQuery( ); |
Java - Hibernate |
//HQL Query safeHQLQuery = session.createQuery("from Inventory where productID=:productid"); safeHQLQuery.setParameter("productid", userSuppliedParameter); //Criteria API String userSuppliedParameter = request.getParameter("Product-Description"); // This should REALLY be validated too // perform input validation to detect attacks Inventory inv = (Inventory) session.createCriteria(Inventory.class).add(Restrictions.eq("productDescription", userSuppliedParameter)).uniqueResult(); |
.NET/C# |
String query = "SELECT account_balance FROM user_data WHERE user_name = ?"; try { OleDbCommand command = new OleDbCommand(query, connection); command.Parameters.Add(new OleDbParameter("customerName", CustomerName Name.Text)); OleDbDataReader reader = command.ExecuteReader(); // … } catch (OleDbException se) { // error handling } |
ASP.NET |
string sql = "SELECT * FROM Customers WHERE CustomerId = @CustomerId"; SqlCommand command = new SqlCommand(sql); command.Parameters.Add(new SqlParameter("@CustomerId", System.Data.SqlDbType.Int)); command.Parameters["@CustomerId"].Value = 1; |
Ruby - ActiveRecord |
# Create Project.create!(:name => 'owasp') # Read Project.all(:conditions => "name = ?", name) Project.all(:conditions => { :name => name }) Project.where("name = :name", :name => name) # Update project.update_attributes(:name => 'owasp') # Delete Project.delete(:name => 'name') |
Ruby |
insert_new_user = db.prepare "INSERT INTO users (name, age, gender) VALUES (?, ? ,?)" insert_new_user.execute 'aizatto', '20', 'male' |
PHP - PDO |
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)"); $stmt->bindParam(':name', $name); $stmt->bindParam(':value', $value); |
Cold Fusion |
<cfquery name = "getFirst" dataSource = "cfsnippets"> SELECT * FROM #strDatabasePrefix#_courses WHERE intCourseID = <cfqueryparam value = #intCourseID# CFSQLType = "CF_SQL_INTEGER"> </cfquery> |
Perl - DBI |
my $sql = "INSERT INTO foo (bar, baz) VALUES ( ?, ? )"; my $sth = $dbh->prepare( $sql ); $sth->execute( $bar, $baz ); |
Authors and Primary Editors
Jim Manico - jim [at] owasp.org
Dave Wichers - dave.wichers [at] aspectsecurity.com
Neil Matatal - neil [at] owasp.org
Other Cheatsheets
OWASP Cheat Sheets Project Homepage