Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - FFFenix

#1
PHP / Optimizar Codigo
9 Septiembre 2011, 03:18 AM
Buenas, queria hacer una consulta al respecto de una sección de unos codigos que estoy armando. El mismo es la parte superior de todos los archivos que se supone que deben estar en una sección interna y segura.


<?php ob_start();require('config.php');require($abr.'funciones/func.php');
$udefer=clean($_COOKIE['Udefer']);
$trantrloia=clean($_COOKIE['Trantrloia']);
$ccwntc=clean($_COOKIE['Ccwntc']);
if(!empty(
$udefer) and !empty($trantrloia) and !empty($ccwntc)){
require(
$abr.'fenc.php');
$udefer2=encaes($udefer);
$trantrloia2=encaes($trantrloia);
$ccwntc2=encaes($ccwntc);
$cmd=$pdo->prepare('SELECT HIGH_PRIORITY COUNT(*) FROM users WHERE client=? and user=? and password=?;');
$cmd->execute(array($ccwntc2,$udefer2,$trantrloia2));
if(
$cmd->fetchColumn()==1){
$cmd=NULL;
$cmd=$pdo->prepare('SELECT HIGH_PRIORITY * FROM users WHERE client=? and user=? and password=? LIMIT 1;');
$cmd->execute(array($ccwntc2,$udefer2,$trantrloia2));
$row2=$cmd->fetch(PDO::FETCH_ASSOC);
$cmd=NULL;
if(
$row2['system']==='678a1014d9c4'){


Explicación:
el Archivo Config, incorpora nombre de Title, Etiquetas Metatags y ese tipo de cosas.
Archivo Func, incorpora funciones necesarias para el desarrollo de los scripts.
Funcion clean limpia las variables.
Funcion encaes cifra la variable en AES.

La idea principal no es el tema de las funciones si no como verifico si el usuario estaria logueado por las cookies. Saludos
#2
3. Muy bueno!, la verdad no conocia eso, pense que era otra forma de llamar al else o algo asi las veces que lei "elseif" en algun codigo, voy a tener que hacer las modificaciones correspondientes entonces :).
5. Nono, no es para evitar las injecciones si no mas por un tema si roban la bases de datos almenos que no recuperen los datos, Ej. Nombre de las Personas, Datos especificos, o cualquier otra info que guarde esa DB.
#3
1. Coincido con vos jaja
2. No sabia eso!, no hay problemas de compatibilidad segun versiones o so o algo? y con respecto a la velocidad es mas rapido hacer un echo o llamar a una variable <?php= $var; ?> ?
3. No entendi que me quisiste decir u.U
4. Lo intente hacer pero por algun motivo cuando queria comprobar si eran solo numeros con el int no me lo tomaba y lo deje asi
5. La idea era para que no pudieran recuperar la info, la password de el AES es de 256 Caracteres y esta guardada en una variable en un file, el archivo esta bloqueado con el htaccess. Es mas que nada un gusto eso del AES, si en algun momento quisiera vender algo creo que decir esta cifrado en AES queda copado ajaj.
#4
Muchas Gracias, voy a ver de solucionar mejorar la funcion, cuando la mejoro la posteare denuevo a ver que dicen :P.
Una Consulta adicional quisiera hacer, seria posible vulnerar por ende este archivo por ejemplo? Una Parte del Codigo Fuente, el mismo agrega unos datos a la base de datos.

if(empty($_POST['nart']) or empty($_POST['rem'])){?><META HTTP-EQUIV="REFRESH"
CONTENT="2;URL=<?php echo $url;?>/funciones/add_stock.php"></head>
<body><div align="center" style="margin-top:15px;"><b>Hubo un Error, Dejo campos
en blanco al agregar el Remito.</b><br /><br /></div>
</body></html><?php }else{if($_POST['ings'] or $_POST['outs'] or $_POST['losts']){
$art=clean($_POST['nart']);
$rem=clean($_POST['rem']);
$ings=clean($_POST['ings']);
$outs=clean($_POST['outs']);
$losts=clean($_POST['losts']);
if(!
is_numeric($art) or !is_numeric($rem) or !is_numeric($ings) or !is_numeric($outs) or !is_numeric($losts)){?>

<META HTTP-EQUIV="REFRESH" CONTENT="2;URL=<?php echo $url;?>/funciones/add_stock.php"></head><body>
<div align="center" style="margin-top:15px;"><b>Hubo un Error, No ingreso correctamente el Numero de
Remito/Cantidad de Ingresos, Egresos o Perdidas, Verifique que haya ingreso unicamente Numeros.</b></div></body></html>
<?php }else{$art=encaes($art);
$rem=encaes($rem);
$ings=encaes($ings);
$outs=encaes($outs);
$losts=encaes($losts);
$cmd=$pdo->prepare('SELECT COUNT(*) FROM stock WHERE remit=?');
$cmd->execute(array($rem));
if(
$cmd->fetchColumn()!=0){
?>
<META HTTP-EQUIV="REFRESH" CONTENT="2;URL=<?php echo $url;?>/funciones/add_stock.php"></head><body>
<div align="center" style="margin-top:15px;"><b>Hubo un Error, El N&deg;de Remito ya existe.</b><br /><br /></div>
</body></html><?php }else{$cmd=$pdo->prepare('INSERT INTO stock (art, remit, outs, ings, losts) VALUES (?, ?, ?, ?, ?);');
$cmd->execute(array($art,$rem,$outs,$ings,$losts));
$cmd=$pdo->prepare('SELECT COUNT(*) FROM rstock WHERE art=?');
$cmd->execute(array($art));
if(
$cmd->fetchColumn()!=0){
$cmd=$pdo->prepare('SELECT * FROM rstock WHERE art=? LIMIT 1;');
$cmd->execute(array($art));
$row=$cmd->fetch(PDO::FETCH_ASSOC);
$outs2=desaes($row['outs']);
$ings2=desaes($row['ings']);
$losts2=desaes($row['losts']);
$outs2=$outs2+desaes($outs);
$ings2=$ings2+desaes($ings);
$losts2=$losts2+desaes($losts);
$outs2=encaes($outs2);
$ings2=encaes($ings2);
$losts2=encaes($losts2);
$cmd=$pdo->prepare('UPDATE rstock SET outs=?, ings=?, losts=? where art=? LIMIT 1;');
$cmd->execute(array($outs2,$ings2,$losts2,$art));
}else{
$cmd=$pdo->prepare('INSERT INTO rstock (art, outs, ings, losts) VALUES (?, ?, ?, ?);');
$cmd->execute(array($art,$outs,$ings,$losts));}


Aclaraciones: encaes() = cifra variable en AES desaes() = descifra Variable en AES, la Funcion clean() es la que esta en el post de arriba.

Me encantaria que si alguien tiene tiempo y ganas de revisar el codigo se lo agradeceria, estoy empezando a querer programar aplicaciones con php y mysql y lo ideal es que no fueran vulnerables!

Gracias nuevamente, voy a aprovechar mañana para darme una vuelta por el foro ya que vi que hay varios post interesantes sobre como limpiar variables y varias funciones que algunos usuarios habian posteado y parece que funcionan bien.
#5
Gracias por responder tan rapido :P, Esta buena la idea de una Expresion Regular que borre todo lo que esta dentro de los < >, no se me habia ocurrido =P,
pero con respecto a las injecciones no me conviene poner esa especie de "seguro extra", de reemplazar frases especificas que son utilizadas para injecciones? como SELECT, WHERE, FROM ? o es algo que no serviria para nada?
#6
La idea era armar una funcion que limpiara todas las interacciones con el usuario, es para usar en aplicaciones webs, desde login, insertar y modificar datos en una base de datos mysql. Para conectar a la base de Datos MySQL se una class PDO.

La idea de filtrar las palabras era como una especie de seguro extra creo, por si habia algun bug evitar que aprovechen a injectarlo de una forma mas sensilla, almenos reemplazando palabras de ese estilo yo creo que costaria un poco mas no?, En la Aplicacion seria no seria algo practico o que se deba usar las palabra que se reemplazan ahi de igual manera.

Que opinas al respecto? Servira como tengo armada esta funcion para impedir posibles ataques XSS e Injecciones?
#7
Buenas Noches, queria saber que opinaban acerca de mi forma de limpiar las variables que entran por POST en una aplicacion web mia, Bueno sin mas les dejo el Codigo:

Adicional a eso, utilizo una Clase que encontre por ahi, InputFilter (http://www.phpclasses.org/package/2189-PHP-Filter-out-unwanted-PHP-javascript-HTML-tags-.html)
function clean($cleans){
$ifilter=new InputFilter();
return htmlentities($ifilter->process(str_ireplace(array('SCRIPT','FUNCTION','IFRAME','DOCUMENT.','GET /','/','\'','RETURN ','HTTP://','.PHP','.HTACCESS','MYSQL_','ALERT','$_POST','$_GET','$_COOKIE','WINDOW.','String.from','javascript:','ONLOAD','ONUNLOAD','ONERROR',"');",'\"',"/'",'\\','<?PHP','LOCATION.','GETURL(',' SRC=','.cookie','<META','<IMG','','DECLARE','VARCHAR','EXEC','HACK','','SELECT','FROM','WHERE','GRANT','CREATE','DATABASE','SHOW','USE','AND','DROP','LIKE','DELETE','INSERT','INTO','UPDATE','SET','USAGE','VALUES','ALTER','FLUSH','MODIFY','JOIN','"',"'",'XSS','UNION','<INPUT','<FORM','%s'),'',trim($cleans))),ENT_QUOTES,'UTF-8');}


Espero su opinion, Gracias desde ya!