Foros del Web » Programando para Internet » PHP »

APORTE: Carta Privada Desbloqueable

Estas en el tema de APORTE: Carta Privada Desbloqueable en el foro de PHP en Foros del Web. Hola a todos, La idea es que como el mensaje es muy personal, no se pueda acceder de ninguna otra forma, SOLO acertando todas las ...
  #1 (permalink)  
Antiguo 21/05/2008, 14:58
.:Chimera:.
Invitado
 
Mensajes: n/a
Puntos:
APORTE: Carta Privada Desbloqueable

Hola a todos,

La idea es que como el mensaje es muy personal, no se pueda acceder de ninguna otra forma, SOLO acertando todas las preguntas que se le hacen.

Archivo index.php
Código PHP:
<?php
define
('E_LTR',phpversion());
define('SET_COOKIE',true);
define('RANDOM',true);

$DE'Perico de los Palotes';
$CARTA'Éste puede ser el contenido de la carta o mensaje que desees hacer llegar al usuario, puedes usar acentos y comillas dobles ("), pero no uses las comillas simples.';


$Q= array( // ARRAY DE PREGUNTAS
        
'Cual es mi color favorito?',
        
'En que ciudad vivo?',
        
'Mi fecha de nacimiento?',
        );

$A= array( // ARRAY DE RESPUESTAS
        
'rojo',
        
'Madrid',
        
'2 de abril de 1981',
        );









/* FUNCIONES PRIMARIAS */

function dflt($stc,$rnd){
  if(!
is_cst('carta_md5key')){ espia();}
  
start();
  echo 
'<h1>Carta Privada</h1>
    <div id="areatexto">
     Se te ha dedicado una carta en esta dirección, pero para leerla debemos asegurar que eres el destinatario deseado. <br />
     A continuación se te plantean unas preguntas que deberías saber sin demasiada dificultad. Tienes que responder de forma sencilla, sin simbolos extranos ni abreviaturas no deseadas. Una vez empezada la primera pregunta, tienes 60 minutos para responder a todas las demás.<br /> Si las aciertas todas, se te mostrará la carta o el mensaje, sinó tendrás que volverlo a intentar.
    </div>
    <div class="clear"></div>
    <div id="botonera">
    <ul>
        <li><a href="index.php?stg=qs&q=1&k='
.gtc('carta_md5key').'">Continuar</a></li>
        <li class="right"><a href="http://www.google.es">Salir</a></li>
    </ul>
    </div>'
;
 
send();
}


function 
qs($q){
    global 
$Q,$A;
    if (!
$_POST){
    
espia();
    
q_check($_GET['q']);
    
start();
    echo 
'<h1>Pregunta #'.$_GET['q'].'</h1>
    <div id="alert"><ol><li>Recuerda escribir con claridad, sin faltas de ortografia.</li>
    <li>Las fechas se evaluan de la siguiente forma [dia] de [mes] de [año] , por ejemplo: <i>5 de febrero de 1995</i></li></ol></div>'
;
    echo 
'<div id="pregunta">'.$Q[$_GET['q']-1].'</div><br />';
    echo 
'<form method="post" name="q" action="'.$_SERVER['PHP_SELF'].'?stg=qs&q='.$_GET['q'].'&k='.$_GET['k'].'">
    Mi respuesta: <input type="text" name="qs" maxlength="64" size="52" title="Escribe tu respuesta..."/>&nbsp;&nbsp;&nbsp;<input value="Enviar Respuesta" type="submit">
    </form>'
;
    
send();
 }else{
    if(
evaluar($_GET['q']-1,$_POST['qs'])){
        
stc('carta_q'.$_GET['q'],md5($A[$_GET['q']-1]));
         
espia();
         
start();
         
$_GET['q']+=1;
           echo 
'<h1><font color="green">Respuesta Correcta !</font></h1><br /><br />Preparando la siguiente pregunta...
           <META http-equiv="refresh" content="2; URL='
.$_SERVER['PHP_SELF'].'?stg=qs&q='.$_GET['q'].'&k='.$_GET['k'].'">
           '
;
         
send();
    }else{
         
espia();
         
start();
           echo 
'<h1><font color="red">Respuesta Incorrecta !</font></h1><br /><br />Regresando a la pregunta anterior...
           <META http-equiv="refresh" content="2; URL='
.$_SERVER['PHP_SELF'].'?stg=qs&q='.$_GET['q'].'&k='.$_GET['k'].'">
           '
;
         
send();
    }
    
 }
}

function 
rd(){
    global 
$CARTA;
     
q_check_last();
     
espia();    
     
start();
     echo 
'<h1>Has desbloqueado el contenido de la carta !</h1><div id="alert">Tendrás acceso al contenido de esta carta durante 60 minutos, tras lo que se bloqueará.<br /> Si pasado este tiempo deseas volver a leerla, deberás responder a las preguntas de nuevo.<br /> Tanto tu IP como el hash de tu sesión en este script han sido almacenados por motivos de seguridad.</div><br /><div id="carta">CONTENIDO DE LA CARTA</div><div id="areatexto">'.$CARTA.'</div>';
     
send();
}



/*  FUNCIONES SECUNDARIAS  Y DE SEGURIDAD*/

function evaluar($pos,$res){
    global 
$A;
  if (
strlen($A[$pos])==strlen("$res")){
    if(
gestiona($A[$pos])==gestiona($res)){
        return 
true;
    }
    return 
false;
   }
  return 
false;
}


function 
espia(){
 if(!
defined('E_LTR') || E_LTR!=phpversion()){
    
start();
        echo 
'Error en la aplicación.';
    
send();
 }
 else{
    if(!isset(
$_COOKIE['carta_md5key'])){
        
stc('carta_md5key',rnd());
        
redirect($_SERVER['PHP_SELF']);
    }else if(isset(
$_GET['k'])){
        if(!
is_cst('carta_md5key',$_GET['k'])){
        
ccs();
        
redirect($_SERVER['PHP_SELF']);
      }
    }    
    if(!isset(
$_COOKIE['carta_addr'])){
        
stc('carta_addr',$_SERVER[REMOTE_ADDR]);
    }else{
      if(!
is_cst('carta_addr',$_SERVER[REMOTE_ADDR])){
        
ccs();
        
redirect($_SERVER['PHP_SELF']);
      }
    }
 }
}



function 
rnd(){
 return 
md5(rand(rand(50,100),rand(200,400)));
}


function 
stc($n,$v,$t=3600){
    
setcookie($n$vtime()+$t);
}

function 
ccs(){
    global 
$A;
    
stc('carta_addr','',-3600);
    
stc('carta_md5key','',-3600);
    for (
$i=1;$i<=count($A);$i++){
        
stc('carta_q'.$i,'',-3600);
    }
}

function 
is_cst($n,$v=''){
    if(!isset(
$_COOKIE[$n])){
     return 
false;
    }
    if(
$_COOKIE[$n]==$v){
        return 
true;
    }
    return 
false;
}

function 
gtc($n){
    return 
$_COOKIE[$n];
}

function 
redirect($w=''){
 
header("Location: http://".$_SERVER['HTTP_HOST'].$w);
}


function 
q_check($q){
    global 
$A;
    if(
$q>&& $q<=count($A)){
        
$q2=$q-1;
        if(!
is_cst('carta_q'.$q2,md5($A[$q2-1]))){
        
$q--;
        
redirect($_SERVER['PHP_SELF'].'?stg=qs&q='.$q.'&k='.$_GET['k']);
        }
    }
    if(
$q<|| $q>count($A)){
        
redirect($_SERVER['PHP_SELF']);
    }
    if(
is_cst('carta_q'.count($A),md5($A[count($A)-1]))){
        
redirect($_SERVER['PHP_SELF'].'?stg=rd&k='.$_GET['k']);
    }
}

function 
q_check_last(){
    global 
$A;
    if(!
is_cst('carta_q'.count($A),md5($A[count($A)-1]))){
        
ccs();
        
redirect($_SERVER['PHP_SELF']);
    }
    if(!isset(
$_GET['k'])){
        
ccs();
        
redirect($_SERVER['PHP_SELF']);        
    }
}

function 
quita_acentos($str){
$de "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
$a "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
return (
strtr($str,$de,$a));
}


function 
gestiona($str){
    return 
addslashes(strtolower(quita_acentos($str)));
}

function 
start(){
echo 
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
 <head>
  <title>Carta Privada</title>
  <meta name="robots" content="noindex, nofollow">
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <link rel="stylesheet" type="text/css" href="./s/s_1.css" media="Screen,Projection,TV" />
 </head>
 <body>
  <div id="baseBody">'
;
}

function 
send(){
    global 
$DE;
    if(
trim($DE)!=''){
    echo 
'<div id="author">Mensaje de parte de: '.$DE.'</div>';
    }
echo 
'<div id="copy">cartas privadas por Chimera - benuva[arroba]gmail[punto]com</div>
  </div><!-- fin de baseBody -->
 </body>
</html>'
;
exit();
}



switch(
$_GET[stg]){

    default:
    
dflt($stc,$rnd);
    break;
    
    case 
"qs":
    
qs($q);
    break;
    
    case 
"rd":
    
rd();
    break;
}
?>

--- sigue en el siguiente mensaje ---

Última edición por .:Chimera:.; 22/05/2008 a las 08:11
  #2 (permalink)  
Antiguo 22/05/2008, 08:12
.:Chimera:.
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: APORTE: Carta Privada Desbloqueable

Archivo /s/s_1.css (dentro de la carpetaa 's'):
Código:
html { height: 100% }

body {
	margin:0px;
	font-family: Verdana, Arial, Sans-serif;
	background-color:#EFF1F5;
	font-size:12px;
	height: 100%;
	color:#414141;
	margin-left: auto;
	margin-right: auto;
	text-align:center;
}

h1 { font-size: 18px;
font-weight: bold; }
	
	
#baseBody { 
	position: relative;
	width: 750px;
	height: 100%;
	display: block;
	background:#AEC7D5;
	margin-left: auto;
	margin-right: auto;
	padding-top: 24px;
	text-align:center;
}

#baseBody h1 { 
	color: #497091;
	font-size: 18px;
	font-weight: bold;
}

#baseBody ul{
    list-style: none;
	position: absolute;
	margin-left:-48px;
}

#baseBody ul li{
	background: url(../i/boton.jpg) left top no-repeat;
	width: 72px;
	height: 20px;
	float: left;
	padding: 0;
	margin-left:24px;
}

#baseBody ul li a{
	display:block;
	font: bold 12px/20px sans-serif;
	color: #414141;
	background-color: inherit;
	text-decoration: none;
}

#baseBody ul li a:hover{
	color: #D4E4ED;	
	background: url(../i/boton.jpg) no-repeat -72px 0px;
	background-color:inherit;
}

#botonera{
	display:block;
	position:relavite;
	margin-left: auto;
	margin-right: auto;
	text-align:center;
	width: 200px;
}


#areatexto{
	display:block;
	background: #D3E4EB;
	width: 68%;
	padding: 4px;
	border-width: 0px 2px 2px 0px;
	border-color: #A2BCC1;
	border-style: solid;
	margin-left: auto;
	margin-right: auto;
	text-align:center;
}

#carta{
	display:block;
	background: #D3E4EB;
	width: 170px;
	font-weight: bold;
	color: #A2BCC1;
	font-size: 11px;
	padding: 1px;
	border-width: 1px 1px 0px 1px;
	border-color: #A2BCC1;
	border-style: solid;
	margin-left: auto;
	margin-right: auto;
	text-align:center;
}


#pregunta{
	width: 400px;
	padding: 2px;
	margin-top: 32px;
	text-align: right;
	font-size: 16px;
	font-weight: bold;
	color: #333333;
	background: #D3E4EB;
	border-width: 0px 2px 2px 0px;
	border-color: #A2BCC1;
	border-style: solid;
}


#alert{
	width: 390px;
	font-size: 9px;
	text-align: left;
	color: #5A8A4A;
	background: #C9E2C0;
	border-width: 0px 2px 2px 0px;
	border-color: #78BB5B;
	border-style: solid;
	margin-left: auto;
	margin-right: auto;
}

#alert ol{
	padding: 0px;
	padding-left:18px;
}

#author {
	width: 240px;
	font-size: 10px;
	font-weight: bold;
	text-align: left;
	color: #5A8A4A;
	position: absolute;
	bottom: 40px;
	right: 10px;
	padding: 2px;
	background: #D3E4EB;
	border-width: 0px 1px 1px 0px;
	border-color: #666666;
	border-style: solid;
}

#copy {
	width: 320px;
	font-size: 9px;
	text-align: center;
	color: #333333;
	position: absolute;
	bottom: 2px;
	padding: 2px;
	background: #D3E4EB;
	border-width: 0px 1px 1px 0px;
	border-color: #666666;
	border-style: solid;
}

#baseBody input{
	padding:2px;
	border: 2px solid #CADAE3;
	font: bold 11px Verdana, Helvetica, Arial;
	background: #EFF1F5;
	color: #3E6785;
}

#baseBody input:focus, #baseBody input:hover{
	background-color: #F8F9FA;
	border-color: #C0D3DE;
}

.clear{
	clear: both;
}
Imagen /i/boton.jpg (dentro de la carpeta 'i'):




Podeis descargar todo el script montado aquí (descarga directa).

Un saludete amistoso.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:22.