Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Atalus en 30 Junio 2009, 20:11 pm



Título: tu como proteges tus aplicaciones php??
Publicado por: Atalus en 30 Junio 2009, 20:11 pm
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..


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: [u]nsigned en 30 Junio 2009, 20:29 pm
Funcion anti Inyecciones SQL incluida en SMF, publicada por дٳŦ*

Código
  1. <?php
  2. function addslashes__recursive($var){
  3. if (!is_array($var))
  4. return addslashes($var);
  5. $new_var = array();
  6. foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
  7. return $new_var;
  8. }
  9. $_POST=addslashes__recursive($_POST);
  10. $_GET=addslashes__recursive($_GET);
  11. $_REQUEST=addslashes__recursive($_REQUEST);
  12. $_SERVER=addslashes__recursive($_SERVER);
  13. $_COOKIE=addslashes__recursive($_COOKIE);
  14. ?>
  15.  

Saludos  ;)


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: Azielito en 30 Junio 2009, 20:33 pm
sip, algo asi uso en los mios =) ésta funcion esta mas completa que la mia :xD


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: Atalus en 30 Junio 2009, 20:58 pm
pero si tienes magic-quotes activado?? esa aplicacion t convertira un ' en ///' 


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: Atalus en 30 Junio 2009, 21:09 pm
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?


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: [u]nsigned en 30 Junio 2009, 21:21 pm
Es lo mismo que postie yo mas arriba.. :huh:

Saludos  ;D


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: 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?


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: HardieVon en 1 Julio 2009, 03:21 am
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


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: Atalus en 1 Julio 2009, 03:25 am
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


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: ^Cloud^ en 2 Julio 2009, 13:08 pm
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,


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: Atalus en 2 Julio 2009, 18:54 pm
muy bueno cloud ;)


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: & eDu & en 2 Julio 2009, 19:17 pm
Evitar XSS
Digamos que busqueda contiene la busqueda realizada
Código
  1. <? $busqueda=str_replace(”‘“,”······”,$busqueda);
  2. $busqueda=htmlentities($busqueda);
  3. echo “Resultados de $busqueda; ?>


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: дٳŦ٭ en 2 Julio 2009, 20:50 pm
Sí, sí estaba mal XD pero ahí tiene la versión que funciona  :silbar:


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: ^Cloud^ en 3 Julio 2009, 21:52 pm
Si te refieres a que el código estaba mal... es cierto. Tenía la intención de probar si era más eficiente el uso de expresiones regulares que addslashes... se acabo mi tiempo de ocio en el trabajo xD.

Lo edite para quitar el callback a la función que escapaba las comillas.

Un saludo,


Título: Re: tu como proteges tus aplicaciones php??
Publicado por: MazarD en 9 Julio 2009, 15:07 pm
 Para xss y sqlinjections:
Código
  1. function sana($cadena)
  2. {
  3. if (!is_numeric($cadena))
  4. {
  5. return htmlentities($cadena,ENT_QUOTES);
  6. } else {
  7. return $cadena;
  8. }
  9. }

Y tokens por todos sitios para xsrf
Código
  1. function genToken()
  2. {
  3. $charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  4. $length = mt_rand (10, 15);
  5. for ($i=0; $i<$length; $i++) $key .= $charset[(mt_rand(0,(strlen($charset)-1)))];
  6. return $key;
  7. }

Saludos.



Título: Re: tu como proteges tus aplicaciones php??
Publicado por: Pazador en 24 Julio 2009, 20:39 pm
Funcion anti Inyecciones SQL incluida en SMF, publicada por дٳŦ*

Código
  1. <?php
  2. function addslashes__recursive($var){
  3. if (!is_array($var))
  4. return addslashes($var);
  5. $new_var = array();
  6. foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
  7. return $new_var;
  8. }
  9. $_POST=addslashes__recursive($_POST);
  10. $_GET=addslashes__recursive($_GET);
  11. $_REQUEST=addslashes__recursive($_REQUEST);
  12. $_SERVER=addslashes__recursive($_SERVER);
  13. $_COOKIE=addslashes__recursive($_COOKIE);
  14. ?>
  15.  

Saludos  ;)

Estoy aprendiendo PHP y note que esa funcion solo filtra los dos tipos de comillas unicamente en comparacion de mysql_real_escape_string que filtra: \x00, \n, \r, \, ', " y \x1a y evita una inyeccion: Lei esto (http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string)

Yo por lo general uso esta funcion que encontre en la red (para mi la mejor :laugh:)
Código
  1. <?php
  2. // Aplicar comillas sobre la variable para hacerla segura
  3. function comillas_inteligentes($valor)
  4. {
  5.   // Retirar las barras
  6.       $valor = stripslashes($valor);
  7.   }
  8.  
  9.   // Colocar comillas si no es entero
  10.   if (!is_numeric($valor)) {
  11.       $valor = "'" . mysql_real_escape_string($valor) . "'";
  12.   }
  13.   return $valor;
  14. }
  15.  
  16. // Conexion
  17. $enlace = mysql_connect('mysql_host', 'mysql_usuario', 'mysql_contrasenya')
  18.   OR die(mysql_error());
  19.  
  20. // Realizar una consulta segura
  21. $consulta = sprintf("SELECT * FROM usuarios WHERE usuario=%s AND password=%s",
  22.           comillas_inteligentes($_POST['username']),
  23.           comillas_inteligentes($_POST['password']));
  24.  
  25. mysql_query($consulta);
  26. ?>
pero antes filtro los datos con htmlentities  :P


PD: es curioso y/o algo raro que un espacio " " juegue un papel importante aqui porque luego de escribir:
(http://i30.tinypic.com/fc037k.jpg)

e intente previsualizar el post me muestre:
(http://i30.tinypic.com/32ziexz.jpg)

pero cuando escribo:
(http://i26.tinypic.com/10d9lyw.jpg)
recien previsualiza el post  :silbar: