Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save trycf/6d6219e4280828404590fa9a5c5b3996 to your computer and use it in GitHub Desktop.

Select an option

Save trycf/6d6219e4280828404590fa9a5c5b3996 to your computer and use it in GitHub Desktop.
TryCF Gist
<cfscript>
checkFields = ["test1", "test2"]
temp = hashasSuspiciousInput(checkFields);
public boolean function hasSuspiciousInput( required array checkFields ) {
var suspiciousInput = false;
var sqlPatterns = getSQLInjecionPatterns();
cfloop( array=arguments.checkFields, index="fieldValue" ){
if( fieldValue.trim().len() > 0 ) {
cfloop( array=sqlPatterns, index="pattern" ){
if( reFindNoCase(pattern, fieldValue) ) {
suspiciousInput = true;
break;
}
}
if ( suspiciousInput ) {
break;
}
}
}
return suspiciousInput;
}
public void function blockOnSuspiciousInput( required boolean hasSuspiciousInput, required struct loginData, string failReason ) {
if( arguments.hasSuspiciousInput ) {
application.loginService.logFailedLogin( argumentCollection=arguments.loginData.append( { failReason: arguments.failReason } ) );
location( "/login.asp?nologin=1&sql=1", "false" );
abort;
}
}
private array function getSQLInjecionPatterns() {
sqlPatterns = [
"(\b(SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|EXEC|EXECUTE|UNION|DECLARE|CAST|CONVERT)\b)",
"(--|\|\/\*|\*\/)",
"(\bOR\b.*=.*)",
"(\bAND\b.*=.*)",
"(;.*\b(SELECT|INSERT|UPDATE|DELETE|DROP)\b)",
"(UPDATEXML|EXTRACTVALUE|XMLTYPE|JSON_KEYS|GTID_SUBSET)",
"(UTL_INADDR|DBMS_UTILITY|UTL_HTTP|UTL_FILE)",
"(\bROW\s*\()",
"(CONCAT\s*\(.*SELECT)",
"(\x27|\x22)(\s*)(OR|AND)(\s*)(\x27|\x22)",
"(WAITFOR\s+DELAY)",
"(BENCHMARK\s*\()",
"(SLEEP\s*\()",
"(\|\|.*SELECT)",
"(CHAR\s*\(\d+\))",
"(0x[0-9A-F]+)",
"(%27|%22|%2D%2D|%23)"
];
return sqlPatterns;
}
</cfscript>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment