tu como proteges tus aplicaciones php??

Iniciado por Atalus, 30 Junio 2009, 20:11 PM

0 Miembros y 1 Visitante están viendo este tema.

Atalus

Wenaz a todos,..

ando repasando mis scripts php, depurandolos, y checando la seguridad. y me dio la curiosidad de, ustedes como protegen sus aplicaciones php de atajes injection y esas cosas...

que tal usan el htmlentities, addslashes, strpislashes.. los usan asi con la funcion como tal?? o las complementan con instruccion para detectar magic-quotes en el server y esas cosas..

seria bueno que muestren sus codigos aver si nos sirve para mejorarlos..

[u]nsigned

Funcion anti Inyecciones SQL incluida en SMF, publicada por дٳŦ*

Código (php) [Seleccionar]

<?php
function addslashes__recursive($var){
if (!
is_array($var))
return 
addslashes($var);
$new_var = array();
foreach (
$var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
return 
$new_var;
}
$_POST=addslashes__recursive($_POST);
$_GET=addslashes__recursive($_GET);
$_REQUEST=addslashes__recursive($_REQUEST);
$_SERVER=addslashes__recursive($_SERVER);
$_COOKIE=addslashes__recursive($_COOKIE);
?>



Saludos  ;)

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

Azielito

sip, algo asi uso en los mios =) ésta funcion esta mas completa que la mia :xD

Atalus

pero si tienes magic-quotes activado?? esa aplicacion t convertira un ' en ///' 

Atalus

#4
Bueno buscando por el foro veo una solucion a lo del magic quotes


Citar//----------------------------------------------+
// We claer all traffic of our server         |
//----------------------------------------------+
// This function I extrac of SMF system fourum, cleared all " and ' in traffic server
function addslashes__recursive($var){
   if (!is_array($var))
      return addslashes($var);
      $new_var = array();
         foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
               return $new_var;
            }
      //If the magic quotes are disable, aplicate the function, else, do not nothing
      if(get_magic_quotes_gpc()==0){
            $_POST=addslashes__recursive($_POST);
            $_GET=addslashes__recursive($_GET);
            $_REQUEST=addslashes__recursive($_REQUEST);
            $_SERVER=addslashes__recursive($_SERVER);
            $_COOKIE=addslashes__recursive($_COOKIE);
         }

mas scripts para proteger sistemas php?

[u]nsigned

Es lo mismo que postie yo mas arriba.. :huh:

Saludos  ;D

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

Atalus

#6
no es lo mismo facku.. ahi ya implementan un if para solucionar el problema si tienes activado magic quotes ;).. weno es lo mismo pero mejorado ::)


Ahora tengo un problema.. al usar htmlentities en una web  que tengo mod_rewrite, y tratar de agarrar el valor d una variable a travez de get, no lo agarra.. alguien sabe solucionar esto?

HardieVon

Cita de: Atalus en 30 Junio 2009, 21:31 PM
no es lo mismo facku.. ahi ya implementan un if para solucionar el problema si tienes activado magic quotes ;).. weno es lo mismo pero mejorado ::)


Ahora tengo un problema.. al usar htmlentities en una web  que tengo mod_rewrite, y tratar de agarrar el valor d una variable a travez de get, no lo agarra.. alguien sabe solucionar esto?
postea tu mod

Atalus

ya vi el problema..

al parecer el codigo que ronda por ahi, es decir:

Citar//----------------------------------------------+
// We claer all traffic of our server         |
//----------------------------------------------+
// This function I extrac of SMF system fourum, cleared all " and ' in traffic server
function addslashes__recursive($var){
   if (!is_array($var))
      return addslashes($var);
      $new_var = array();
         foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
               return $new_var;
            }
      //If the magic quotes are disable, aplicate the function, else, do not nothing
      if(get_magic_quotes_gpc()==0){
            $_POST=addslashes__recursive($_POST);
            $_GET=addslashes__recursive($_GET);
            $_REQUEST=addslashes__recursive($_REQUEST);
            $_SERVER=addslashes__recursive($_SERVER);
            $_COOKIE=addslashes__recursive($_COOKIE);
         }

esta mal...

aki esta corregido:

Citar// With this function, we are clear the html chars to entity ascii
function clear_chars($var){
        if(!is_array($var)){
            return htmlentities($var);
                }
        else{
            $new_var = array();
            foreach ($var as $k => $v){
                $new_var[htmlentities($k)]=clear_chars($v);
            }   
         return $new_var;
        }
    }
    if($_POST) $_POST=clear_chars($_POST);
    if($_GET) $_GET=clear_chars($_GET);
    if($_REQUEST) $_REQUEST=clear_chars($_REQUEST);
    if($_SERVER) $_SERVER=clear_chars($_SERVER);
    if($_COOKIE) $_COOKIE=clear_chars($_COOKIE); 

asi funciona a la perfeccion

^Cloud^

#9
Lo cierto es que la función está bastante bien y me ha tenido pensando un par de días ya que tenía en la cabeza que php ya dispone de funciones que permiten recorrer de forma recursiva un array y se podría simplificar o mejorar en la medida que se pueda lo expuesto aquí.

Funcionálmente el uso de esto es transparente pero técnicamente puede tener bastante repercusión en el desarrollo de una aplicación y en su rendimiento.

La teoría es fácil. La función array_walk_recursive toma los datos por referencia por lo tanto en la función callback tenemos que tomar la variable que nos llege por referencia. De esta forma estamos cambiando directamente los valores del array original sin tener que duplicar la información en otra variable.

Otro de los puntos interesantes de esto es donde usar esta función y como. Para mi caso sólo me interesa aplicar esto a las consultas sql que se lancen en mi aplicación, por lo tanto, lo voy a implementar con una función que encapsule el lanzamiento de la consulta.

$params = array("13'3","O'relly",1);
$sql = "SELECT * FROM users WHERE edad = %d AND nombre = '%s' AND status = %d";

function myaddslashes(&$item) {
 $item = addslashes($item);
}

function db_my_query($sql,$params = array()) {
 if (!empty($params)) {
    array_walk_recursive($params,'myaddslashes');
    $sql = vsprintf($sql,$params);
    //return mysql_query($sql);
    return $sql;
 } else {
   return FALSE;
 }
}

print db_my_query($sql,$params);

De esta forma me aseguro, por una parte, que las cadenas de los parámetros de las sql van a tener siempre las comillas escapadas y por otra parte me aseguro que, en todos los casos, cuando la sql requiera una cadena obtenga una cadena y cuando necesite un entero obtenga un entero sin posibilidad de error ya que las cadenas preformateadas no admiten otros tipos de datos mas que los que se especifican en el formateo de la cadena.

Espero que os sirva de algo.

Un saludo,
Ahora resulta que imagino mi pasado
y llevo en esta clínica cuarenta años.
Nunca jamás he pisado la calle
y el electroshock ha sido mi padre