Вы не можете полагаться исключительно на CF для XSS-атак (или sql-инъекций). Вы можете написать свой собственный код в application.cfc, который будет искать атаки XSS/SQL Injection в каждой из областей, и запускать этот код в методах onRequest()
или onRequestStart()
, в зависимости от того, как настроено ваше приложение. Вот пример (пожалуйста, не используйте этот код, не зная точно, что он делает, и вы тщательно его протестировали. Это код, который я вытащил из приложения, но возможны ложные срабатывания, и я не уверен на 100%). уверен со всеми тестами):
Этот код будет в application.cfc
public boolean function onRequestStart (
required string targetPage) {
try {
if (checkForAttack()) {
location url="/" addtoken=false;
return true;
}
... do other stuff ...
} catch (any e) {
onError(e, "onRequestStart");
}
return true;
} // onRequestStart()
private boolean function checkForAttack() {
// check for any kind of sql injection or xss attack
var attackFound = false;
// you could change these tests, or add more tests
var tests = ["4445434C415245", "cast(\s|%20)*(%28|\()", "(;|%3B)(\s|%20)*DECLARE", /*"exec(\s|%20)*\(",*/ "schema\.columns|table_name|column_name|drop(\s|%20)+table|insert(\s|%20)+into|\.tables", "\.\[sysobjects\]", "\.sysobjects"];
var ctTests = ArrayLen(tests);
var ix = 0;
var key = "";
if (isDefined("CGI.query_string") && CGI.query_string != "") {
for (ix = 1; ix <= ctTests; ix++) {
if (REFindNocase(tests[ix], CGI.query_string) > 0) {
CGI.query_string = "";
attackFound = true;
break;
}
}
}
if (isDefined("URL")) {
for (key in URL) {
for (ix = 1; ix <= ctTests; ix++) {
if (REFindNocase(tests[ix], URL[key]) > 0) {
attackFound = true;
URL[key] = "";
}
}
}
}
if (isDefined("Form")) {
for (key in Form) {
for (ix = 1; ix <= ctTests; ix++) {
if (reFindNocase(tests[ix], Form[key]) > 0) {
attackFound = true;
Form[key] = "";
}
}
}
}
if (IsDefined("Cookie")) {
for (key in Cookie) {
for (ix = 1; ix <= ctTests; ix++) {
if (REFindNocase(tests[ix], Cookie[key]) > 0) {
attackFound = true;
Cookie[key] = "";
}
}
}
}
return attackFound;
} // checkForAttack()
person
Redtopia
schedule
07.08.2018
canonicalize()
и используете несколько кодировок или смешанные кодировки, вам, вероятно, следует зарегистрировать и забанить пользователя. На самом деле нет никаких веских причин для законного пользователя, чтобы случайно пересечь любой из этих случаев. - person Shawn   schedule 07.08.2018scriptprotect
ОЧЕНЬ примитивен и на самом деле не улавливает многого. И я считаю, что он ищет только небольшой набор неканонизированных тегов. Это всегда было чем-то, что я включал, но даже отдаленно не полагался на это. - person Shawn   schedule 07.08.2018