У меня есть эта простая страница проверки ошибок на моем классическом веб-сайте ASP и настроена настраиваемая страница ошибок, чтобы ошибки сценариев (500 и 500.100) вызывали эту страницу ошибки, чтобы ошибки регистрировались в MySQL таблицы:Ошибка передачи страницы, не захватывающей все ошибки
<!--#INCLUDE file="db_connection.asp" -->
<%
On Error Resume Next
'crappy function I use
Function newstr(str)
newstr = Server.HTMLencode(str)
newstr = Replace(newstr, "'","''")
newstr = Replace(newstr, "\","\\")
newstr = Replace(newstr, chr(10), "<br />")
End Function
'get all form data and put it into a variable
For ix = 1 to Request.Form.Count
fieldName = Request.Form.Key(ix)
fieldValue = Request.Form.Item(ix)
bb = bb & fieldName & ": " & fieldValue & vbcrlf
Next
bb = newstr(bb)
set objError = Server.getLastError()
strNumber = objError.AspCode & " : " & Err.Number
strSource = objError.Category
strPage = objError.File
strDesc = objError.Description & " : " & ObjError.ASPDescription & " :: " & Err.Description
strDesc = newstr(strDesc)
strCode = Server.HTMLEncode(objError.Source)
If strCode = "" then strCode = "No code available"
strLine = ObjError.Line
strASPDesc = ObjError.ASPDescription
strRemoteAddr = Request.ServerVariables("REMOTE_ADDR")
strLocalAddr = Request.ServerVariables("LOCAL_ADDR")
ref = request.servervariables("HTTP_REFERER")
str = request.servervariables("QUERY_STRING")
ip_url = strRemoteAddr
ua = newstr(request.servervariables("HTTP_USER_AGENT"))
totalstring = strPage & "?" & str
sql = ""
sql = SQL & " INSERT INTO error_log ("
sql = SQL & " er_time, "
sql = SQL & " er_number, "
sql = SQL & " er_source, "
sql = SQL & " er_page, "
sql = SQL & " er_desc, "
sql = SQL & " er_code, "
sql = SQL & " er_line, "
sql = SQL & " er_remote_addr, "
sql = SQL & " er_local_addr, "
sql = SQL & " er_str, "
sql = SQL & " er_ref, "
sql = SQL & " er_type, "
sql = SQL & " ip_url, "
sql = SQL & " er_br, "
sql = SQL & " er_form"
sql = SQL & ") VALUES ("
sql = SQL & " now(),"
sql = SQL & " '" &strNumber&"',"
sql = SQL & " '"&strSource&"',"
sql = SQL & " '"&strPage&"',"
sql = SQL & " '"&strDesc&"',"
sql = SQL & " '"&strCode&"',"
sql = SQL & " '"&strLine&"',"
sql = SQL & " '"&strRemoteAddr&"',"
sql = SQL & " '"&strLocalAddr&"',"
sql = SQL & " '"&totalstring&"',"
sql = SQL & " '"&ref&"',"
sql = SQL & " '500',"
sql = SQL & " '"&ip_url&"',"
sql = SQL & " '"&ua&"',"
sql = SQL & " '"&bb&"') "
oConn.Execute(sql)
%>
Проблема я нахожу в том, что много линий держать заканчиваясь в журнале ошибок, но не вызывает Server.getLastError, потому что все переменные из этого являются NULL. И я знаю, что кто-то напрямую не просматривает URL-адрес страницы с ошибкой, потому что заполняется переменная «strPage» (установленная objError.File).
Однако, если я посещаю страницу с ошибкой, она всегда работает нормально.
Страницы, которые находятся в журнале ошибок, всегда связаны с ними, но идентификатор этого всегда меняется - так, например, это может быть, что «totalstring» (из objError.File сцепляются с вопросительным знаком с последующим Request.ServerVariables («QUERY_STRING») может быть:
/music/view.asp?id=192
/designs/page.asp?id=5775
/designs/page.asp?id=5797
Они все ошибки в том же месте, что :.
e = newstr(request("id"))
Где «NewStr» функция упоминается в верхней части этой страницы, я знаю, что эта функция является чепухой и риски SQL инъекций и т.д.
Однако, в этом случае, я не могут понять, почему страницы являются ошибками, поскольку они всегда работают отлично для меня и большинства пользователей сайта.
Странно, что IP-адреса пользователей, получающих ошибки, всегда принадлежат одному и тому же интернет-провайдеру - как правило, одному интернет-провайдеру в Германии.
Может ли что-то подозрительное происходить в фоновом режиме? Есть ли какие-то дополнительные записи, которые я мог бы сделать, чтобы понять это?
тридцатого Update июля 2015
Благодаря ответ, @John, я был в состоянии добраться до нижней частью этого, и избежать ошибок, помещая это в верхней части каждой страницы:
<%
''get the cookie data
ck = Request.ServerVariables("HTTP_COOKIE")
'' does the cookie data contain "; = true;" somewhere, does not matter where
v1 = instr(ck, "; =true;")
''if the cookie data starts with "=true;" OR if "; =true;" appears somewhere in the cookie, then redirect somewhere else
if left(ck,6) = "=true;" OR v1 > 0 then response.redirect ("somewhere-else.asp")
%>
Более подробная информация также здесь: https://forums.iis.net/p/1226865/2106015.aspx?Re+Request+Cookies+generate+80004005+2147467259+error+if+cookie+with+no+name
Кажется, какая-то типа хакерской активности, происходящей от ISP Hetzner Online AG
Thanks @John. Я добавил строку для присвоения переменной request.servervariables ("HTTP_COOKIE") переменной, чтобы я мог видеть, что происходит. – 4532066
См. Дополнительную информацию по этому вопросу на странице https://forums.iis.net/p/1226865/2106015.aspx?Re+Request+Cookies+generate+80004005+2147467259+error+if+cookie+with+no+name включая некоторые, возможно, хорошие решения с использованием правил перезаписи URL-адресов IIS. – johna
Обновлен мой ответ, поскольку мой код теста cookie был неправильным. – johna