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..."/> <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, $v, time()+$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>1 && $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<1 || $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 ---