有什么特色;出于安全原因,我不应允许用户输入文本框字段。
答案 0 :(得分:6)
使用如下所示的预准备语句可以更可靠地防止SQL注入。如果你不能使用这种模式,第二种最好的方法是将“白名单”改为好的字符而不是“黑名单”的禁止字符。
<强> .NET 强>
String query =
"SELECT account_balance FROM user_data WHERE user_name = ?";
try {
OleDbCommand command = new OleDbCommand(query, connection);
command.Parameters.Add(new OleDbParameter("custrName", CustName Name.Text));
OleDbDataReader reader = command.ExecuteReader();
// …
} catch (OleDbException se) {
// error handling
}
<强>爪哇强>
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( );
如果您完全设置白名单/黑名单,可以参考OWASP SQL Injection Prevention Cheat Sheet了解更多预备语句示例和OWASP Input Validation Cheat Sheet以了解有关白名单的更多信息。
答案 1 :(得分:0)
mysql_real_escape_string($ string)(PHP)将为您完成这项工作。您不必过滤数据。
大多数情况下,'(单引号)和“(双引号)会带来麻烦而无法逃脱。