INFORMACIÓN
- Zona Más Seguridad para tu NukeET
- Lecturas 4121
- Creado el 10 de julio de 2008 a las 13:31:05
- Última modificación 20 de febrero de 2009 a las 22:06:09
Preguntas
Respuestas
• Cambiar la llave
Lo piden y se hace, si por algún casual quieres cambiar la llave de tu nukeET, lo que tienes que hacer es muy sencillo, vas a codificar md5 allí pones la llave que desees y le das a codificar y te dará el resultado codificado, si se pone prueba el resultado que te da es c893bad68927b457dbed39460e6afd62
Ahora editas el config.php y buscas el $llave = "loqueesa"; y cambias el loquesea por la llave codificada, o sea en nuestro ejemplo (usando la palabra prueba como llave) quedaría
Código
$llave = "c893bad68927b457dbed39460e6afd62";
lo guardas, lo subes y ya está.
Volver al inicio
• Añadir la llave de seguridad
Vamos a poner un sencillo ejemplo de cómo introducir la llave del NukeET, con dos finalidades diferentes.
Para empezar a continuación un sencillo código de un hipotético archivo de admin/modules:
Código
<?php
if(!defined('NUKE_ET'))
{
Header("Location: ../../error.php?op=e403");
die();
}
$aid = substr("$aid", 0,25);
$paso=0;
$result = $db->sql_query("SELECT radminsuper FROM ".$prefix."_authors WHERE aid='$aid'");
$row = $db->sql_fetchrow($result);
$paso = intval($row['radminsuper']);
if ($paso == 1)
{
function ejemplo_ini()
{
include("header.php");
GraphicAdmin();
OpenTable();
echo '
<div style="text-align:center">
<form action="admin.php?op=ejemplo_ir">
<input type="text" name="nombre"><br><br>
<input type="hidden" value="enviar"><br>
</form>
</div>';
CloseTable();
include("footer.php");
}
function ejemplo_ir($nombre)
{
include("header.php");
GraphicAdmin();
OpenTable();
echo '<div style="text-align:center">El nombre introducido es '.$nombre.'</div>';
CloseTable();
include("footer.php");
}
switch($op)
{
case "ejemplo_ini":
ini();
break;
case "ejemplo_ir":
ir($nombre);
break;
}
}
else
{
Header("Location: error.php?op=e404");
die();
}
?>
Vamos a introducir la llave para que, de ponerse de forma correcta, se salte la restricción de tags. El código quedaría así:
Código
<?php
if(!defined('NUKE_ET'))
{
Header("Location: ../../error.php?op=e403");
die();
}
$aid = substr("$aid", 0,25);
$paso=0;
$result = $db->sql_query("SELECT radminsuper FROM ".$prefix."_authors WHERE aid='$aid'");
$row = $db->sql_fetchrow($result);
$paso = intval($row['radminsuper']);
if ($paso == 1)
{
function ejemplo_ini()
{
include("header.php");
GraphicAdmin();
OpenTable();
echo '
<div style="text-align:center">
<form action="admin.php?op=ejemplo_ir">
<input type="text" name="nombre"><br><br>
<b>Llave:</b> <input type="password" name="llavep"><br><br>
<input type="hidden" value="enviar"><br>
</form>
</div>';
CloseTable();
include("footer.php");
}
function ejemplo_ir($nombre)
{
include("header.php");
GraphicAdmin();
OpenTable();
echo '<div style="text-align:center">El nombre introducido es '.$nombre.'</div>';
CloseTable();
include("footer.php");
}
switch($op)
{
case "ejemplo_ini":
ini();
break;
case "ejemplo_ir":
ir($nombre);
break;
}
}else{
Header("Location: error.php?op=e404");
die();
}
?>
Como puedes ver, simplemente se añade un input de type password con nombre llavep. Es muy importante que se llame llavep, de ser otro nombre no funcionará.
Ahora la segunda parte, ya hemos conseguido que se salte la restricción de los tags, pero puede interesarnos que el suceso de la function ejemplo_ir se ejecute sólo si la llave que se puso es correcta, para ello dejamos el código así:
Código
<?php
if(!defined('NUKE_ET'))
{
Header("Location: ../../error.php?op=e403");
die();
}
$aid = substr("$aid", 0,25);
$paso=0;
$result = $db->sql_query("SELECT radminsuper FROM ".$prefix."_authors WHERE aid='$aid'");
$row = $db->sql_fetchrow($result);
$paso = intval($row['radminsuper']);
if ($paso == 1) {
function ejemplo_ini(){
include("header.php");
GraphicAdmin();
OpenTable();
echo '
<div style="text-align:center">
<form action="admin.php?op=ejemplo_ir">
<input type="text" name="nombre"><br><br>
<b>Llave:</b> <input type="password" name="llavep"><br><br>
<input type="hidden" value="enviar"><br>
</form>
</div>';
CloseTable();
include("footer.php");
}
function ejemplo_ir($nombre)
{
global $llave,$llavep;
if($llave!=$llavep)
{
Header("Location: error.php?op=e401");
die();
}
include("header.php");
GraphicAdmin();
OpenTable();
echo '<div style="text-align:center">El nombre introducido es '.$nombre.'</div>';
CloseTable();
include("footer.php");
}
switch($op)
{
case "ejemplo_ini":
ini();
break;
case "ejemplo_ir":
ir($nombre);
break;
}
}else{
Header("Location: error.php?op=e404");
die();
}
?>
Puedes ver cómo no es más que una ampliación, la function ejemplo_in queda intacta y sólo modificamos la iejmplo_ir en la que metemos un global con los valores $llave y $llavep, sólo tenemos que hacer un if para compararlas, de ser diferentes hacemos que muestre el error 401 del NukeET.
Es fácil ¿verdad?
Volver al inicio
• Como agregar el código de seguridad
Agregar el código de seguridad en cualquier zona de tu nuke es muy sencillo.
Primero lo necesario. Básicamente en una function se colocará el código de seguridad y en la function destino se comprobará que se ha introducido correctamente.
Lo habitual es que en una function exista un formulario y nosotros queremos que ese formulario tenga el código de seguridad, a esa function la llamaremos function inicio. La function que se cargará cuando enviemos el formulario es la function destino.
Cada function tiene una línea que empieza por la palabra global seguido de un listado de variables ya definidas en el nuke y que se van a utilizar en la function. A esta línea debemos agregar la variable $gfx_chk en la function inicio y las variables $gfx_chk y $sitekey en la function destino.
Procedamos a colocar el código de seguridad en sí. El código genérico a agregar en la function inicio es:
Código
$random_num = mt_rand(0, 1000000);
if (extension_loaded('gd') AND ($gfx_chk == 3 OR $gfx_chk == 4 OR $gfx_chk == 6 OR $gfx_chk == 7))
{
echo '
<br><br><b>'._SECURITYCODE.':</b>
<img src="error.php?op=gfx&random_num='.$random_num.'" border="1" alt="'._SECURITYCODE.'" title="'._SECURITYCODE.'">
<br><br>
<b>'._TYPESECCODE.':</b> <input type="text" NAME="gfx_check" SIZE="7" MAXLENGTH="6">
<input type="hidden" name="random_num" value="'.$random_num.'">';
}
Debe ponerse dónde deseamos que se muestre el código.
En la function destino debemos colocar el código que comprueba que el código se ha introducido de forma correcta, para ello es bueno que el código se coloque justo despues de la línea del global y el código sería:
Código
$datekey = date("F j");
$rcode = hexdec(md5($_SERVER[HTTP_USER_AGENT] . $sitekey . $_POST[random_num] . $datekey));
$code = substr($rcode, 2, 6);
if (extension_loaded("gd") AND $code != $_POST['gfx_check'] AND ($gfx_chk == 3 OR $gfx_chk == 4 OR $gfx_chk == 6 OR $gfx_chk == 7)) {
include('header.php');
OpenTable();
echo '<center><b>'._SECCODEINCOR.'</b><br><br>'._GOBACK.'</center>';
CloseTable();
include('footer.php');
die();
}
Para terminar, debemos definir en el lang del módulo _SECCONDEINCOR introduciendo la siguiente línea:
Código
define("_SECCODEINCOR","Código de Seguridad es incorrecto, Por favor regresa atrás y escribelo exactamente como fue generado...");
Con esto ya tenemos el código de seguridad integrado. A continuación pongo un sencillo código de un módulo con el código de seguridad:
Código
<?php
/************************************************************************/
/* NUKE ET: Modificacion del PHP-Nuke */
/* ================================== */
/* */
/* Modulo creado con el conversor HTML a NukeET */
/* */
/* Copyright (c) 2004 por Truzone */
/* http://www.truzone.org */
/************************************************************************/
if(!defined('NUKE_ET')) {
Header("Location: ../../error.php?op=e403");
die();
}
require_once("mainfile.php");
$module_name = basename(dirname(__FILE__));
function principal()
{
global $module_name,$gfx_chk;
include('header.php');
OpenTable();
echo '
<form method="post" action="./modules.php?name='.$module_name.'&op=destino">';
$random_num = mt_rand(0, 1000000);
if (extension_loaded('gd') AND ($gfx_chk == 3 OR $gfx_chk == 4 OR $gfx_chk == 6 OR $gfx_chk == 7))
{
echo '
<br><br><b>'._SECURITYCODE.':</b>
<img src="error.php?op=gfx&random_num='.$random_num.'" border="1" alt="'._SECURITYCODE.'" title="'._SECURITYCODE.'">
<br><br>
<b>'._TYPESECCODE.':</b> <input type="text" NAME="gfx_check" SIZE="7" MAXLENGTH="6">
<input type="hidden" name="random_num" value="'.$random_num.'">';
}
echo '
<input type="submit" value="Enviar">
</form>';
CloseTable();
include('footer.php');
}
function destino()
{
global $module_name,$gfx_chk,$sitekey;
$datekey = date("F j");
$rcode = hexdec(md5($_SERVER[HTTP_USER_AGENT] . $sitekey . $_POST[random_num] . $datekey));
$code = substr($rcode, 2, 6);
if (extension_loaded("gd") AND $code != $_POST['gfx_check'] AND ($gfx_chk == 3 OR $gfx_chk == 4 OR $gfx_chk == 6 OR $gfx_chk == 7))
{
include('header.php');
OpenTable();
echo '<center><b>'._SECCODEINCOR.'</b><br><br>'._GOBACK.'</center>';
CloseTable();
include('footer.php');
die();
}
include('header.php');
OpenTable();
echo '
<center>
El código de seguridad es correcto
</center>';
CloseTable();
include('footer.php');
}
switch($op)
{
default:
principal();
break;
case "destino":
destino();
break;
}
?>
Las dudas sobre la programación para NukeET se pueden consultar en el manual al respecto en la Central de Desarrollo
Volver al inicio
• Como activar el mod_rewrite en local
Bueno lo primero seria buscar el archivo httpd.conf, que en el appserv esta en la siguiente ruta
Código
C:AppServApache2.2conf
Una vez encontrado lo habrimos con nuestro editor de php, yo recomiendo el pspad, y buscamos la siguiente linea.
Código
#LoadModule rewrite_module modules/mod_rewrite.so
Le quitamos la # y guardamos.
Para finalizar reinciamos apache, y ya esta.
Manual realizado por
MakiSpain en
este post.
Volver al inicio