default.asp
Código ASP:
Ver original
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ASPBlog</title> <meta http-equiv="Content-Type" content="text/xml;charset=iso-8859-1"/> <meta http-equiv="pragma" content="no-cache"> </head> <body> <div id="global"> <% Session("antihack") = True %> <h4>Este frame carga la pagina protegida correctamente y crea un candado abandonando la sesion</h4> <object id="frame" data="pagina-protegida.asp?i=1" type="text/html" width="500" height="300" border="0"></object> <br/> <hr/> <br/> <h4>Al volver a cargar la pagina protegida el candado evita que se acceda</h4> <object id="frame2" data="pagina-protegida.asp?i=1" type="text/html" width="500" height="100" border="0"></object> </div> </body> </html>
pagina-protegida.asp
Código ASP:
Ver original
<% Response.addHeader "pragma", "no-cache" Response.CacheControl = "Private" Dim referer referer = Replace(Request.ServerVariables("HTTP_REFERER"),"www.","") 'Verifico si trae parametros por url If Request.Querystring("i") = "1" Then 'Esta pidiendo el iframe, verifico si la sesion antihack existe If session("antihack") = True Then 'La sesion existe, esta accediendo desde el frame principal %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="pragma" content="no-cache"> </head> <body> <iframe src="pagina-protegida.asp" width="500" height="300" frameborder="0" scrolling="no"></iframe> </body> </html> <% 'Elimino la sesion, asi creo un candado session("antihack") = False session.abandon Else 'La sesion no existe, esta tratando de acceder directamente %> <h3 style="color:red">Error, peticion no autorizada...</h3> <% End If Else 'No esta pidiendo iframe, verifico referer If InSTR(Referer,"http://aspblog.in") = 1 Then 'el referer es del dominio correcto, doy acceso %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="pragma" content="no-cache"> </head> <body> <div>Esta pagina tiene el codigo que quiero proteger</div> </body> </html> <% Else If Not InSTR(Referer,"http://aspblog.in") = 1 Then Response.Redirect("/") End If End If End If %>
Se supone que esto trabaja así
Si ingresas a default.asp, el primer frame diria "Esta pagina tiene el codigo que quiero proteger" mientras que el segundo frame tendria un mensaje en rojo que advierte "Error, peticion no autorizada..."
Si ingresas a pagina-protegida.asp deberia redireccionar a default.asp sin dar algun aviso
Si ingresas a pagina-protegida?i=1 es decir con querystring, tal como lo pido en ambos ObjectTag de default.asp, deberia aparecerte el mensaje de error.
El algoritmo funciona en Chrome y Firefox 3 según el plan.
Pero el problema está en Opera 11 y Explorer 8
En opera 11 ambos frames en default.asp muestran el codigo correcto
En Internet explorer 8, si recargas varias veces la página, en ciertas ocasiones muestra el codigo de error en ambos frames...
¿Alguien sabe cómo puedo solucionar esto?