Foros del Web » Programando para Internet » PHP »

no funciona codigo anti injecction sql

Estas en el tema de no funciona codigo anti injecction sql en el foro de PHP en Foros del Web. hola amigos, tengo un programa en php en mi web y cuando le pongo este codigo Código PHP: if(isset( $_POST [ 'login' ]) and isset( $_POST [ ...
  #1 (permalink)  
Antiguo 04/11/2015, 18:30
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
no funciona codigo anti injecction sql

hola amigos, tengo un programa en php en mi web y cuando le pongo este codigo

Código PHP:
if(isset($_POST['login']) and isset($_POST['pass']) )
{
    
$login=mysql_real_escape_string($_POST['login']);
    
$pass=mysql_real_escape_string($_POST['pass']); 
para que no funcione el famoso 'or''='

pues no entra en la web.

si no le pongo nada y lo dejo como

Código PHP:
if(isset($_POST['login']) and isset($_POST['pass']) )
{
    
$login=$_POST['login'];
    
$pass=$_POST['pass']; 
entra bien en la web pero funciona la injeccion sql.

¿alguien sabe por que pasa esto y como solucionarlo.

muchas gracias amigos.
  #2 (permalink)  
Antiguo 04/11/2015, 19:50
Avatar de AlejandraLara  
Fecha de Ingreso: octubre-2015
Mensajes: 115
Antigüedad: 8 años, 5 meses
Puntos: 19
Respuesta: no funciona codigo anti injecction sql

No uses mysql, usa mysqli.
__________________
Si le das el código hecho a alguien nunca va a aprender ni te dará las gracias, si le dices como hacerlo aprenderá y te dará las gracias (algún día).
  #3 (permalink)  
Antiguo 05/11/2015, 02:47
Avatar de adrirs11  
Fecha de Ingreso: diciembre-2012
Ubicación: BCN
Mensajes: 107
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: no funciona codigo anti injecction sql

Este código te puede ser útil:

Código PHP:
Ver original
  1. if (strpos($usr,'=') == true or strpos($usr,'<') == true or strpos($usr,'>') == true or strpos($usr,'"') == true or strpos($usr,';') == true or strpos($usr,"'") == true) {
  2.        echo "<script>window.location='Logout.php'</script>";
  3. } else if (strpos($pass,'=') == true or strpos($pass,'<') == true or strpos($pass,'>') == true or strpos($pass,'"') == true or strpos($pass,';') == true or strpos($usr,"'") == true) {
  4.        echo "<script>window.location='Logout.php'</script>";
  5. } else{
  6.        echo "<script>window.location='Home.php'</script>";
  7. }
  #4 (permalink)  
Antiguo 05/11/2015, 05:16
 
Fecha de Ingreso: enero-2014
Mensajes: 36
Antigüedad: 10 años, 3 meses
Puntos: 4
Respuesta: no funciona codigo anti injecction sql

mysql_real_escape_string ( o mysqli ) no es suficiente para filtrar inyecciones SQL

Utiliza todas las herramientas que tengas disponibles:

strip_tags
stripslashes
  #5 (permalink)  
Antiguo 05/11/2015, 05:22
Avatar de baldaweb  
Fecha de Ingreso: septiembre-2010
Ubicación: Barco pirata
Mensajes: 244
Antigüedad: 13 años, 6 meses
Puntos: 20
Respuesta: no funciona codigo anti injecction sql

Otra posible solución

Código PHP:
Ver original
  1. $login_escapado = mysql_real_escape_string($login);
  2. $login_para_consulta= str_replace (["< ",">","[","]","*","^"], "" , $login_escapado);
__________________
CHOOO COOO LAAA TEEEEEEEEE
  #6 (permalink)  
Antiguo 05/11/2015, 07:20
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: no funciona codigo anti injecction sql

Muchas gracias a todos por las respuestas. han sido muy instructivas. esta misma tarde me pongo ha hacer pruebas. Ire comentando todo.

voy a hechar un vistazo tambien a
strip_tags
stripslashes
ya que no las conocia.

un saludo amigos.
  #7 (permalink)  
Antiguo 05/11/2015, 14:59
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: no funciona codigo anti injecction sql

bueno amigos gracias por las respuestas tan buena sque me habeis dado.

voy a poner:

$login=mysql_real_escape_string
strip_tags
stripslashes

¿hay alguna más que deba tener en cuenta?

muchiiiisiiiimas gracias.
  #8 (permalink)  
Antiguo 05/11/2015, 15:13
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: no funciona codigo anti injecction sql

Échale un vistazo a esto. Y busca más sobre prevención de inyecciones SQL; hay muchas soluciones.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #9 (permalink)  
Antiguo 05/11/2015, 15:19
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: no funciona codigo anti injecction sql

gracias alexis voy a mirar. ya tengo entretenimiento para mañana.
  #10 (permalink)  
Antiguo 09/11/2015, 08:40
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: no funciona codigo anti injecction sql

no me funciona los codigos para restringir injecciones sql.

he probado con-.

Código PHP:
$login mysql_real_escape_string($_POST['login']);
        
$pass mysql_real_escape_string($_POST['pass']); 
asi es como tengo mi codigo-.

Código PHP:
<?php
 
@session_start();




$nuevo=0;

if(isset(
$_POST['login']) and isset($_POST['pass']) )
{
    
$login=$_POST['login'];
    
$pass=$_POST['pass'];

    
$login mysql_real_escape_string($_POST['login']);
        
$pass mysql_real_escape_string($_POST['pass']);
    

}


elseif(isset(
$_SESSION['login']) and isset($_SESSION['pass']))
{
    
$login=$_SESSION['login'];
    
$pass=$_SESSION['pass'];
}

else
{     
?>
<?php

    
die();

}

$link=mysqli_connect('lxxxxx','xxxxx','xxxxx','xxxxx') or die(mysqli_error());


$consulta="select * from usuarios
where login='$login' and pass='$pass'"
;


 
$resultado=mysqli_query($link,$consulta);
 
 
    if (
$row=mysqli_fetch_array($resultado))
    {
        
$login=$row ['login'];
        
$tipo_usuario=$row ['tipo_usuario'];
        
        
        
//creo las nuevas variables de mi sesion
        
$_SESSION ['login']=$login;
        
$_SESSION ['pass']=$pass;
        
$_SESSION ['tipo_usuario']=$tipo_usuario;
        
        
    
    }
    
    else 
    {
die ();
    }
    
    
    
?>
creo que es por que hay algo mal en mi codigo pero la realidad es que no funciona.

a ver si me pueden ayudar. muchas gracias.
  #11 (permalink)  
Antiguo 09/11/2015, 09:00
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: no funciona codigo anti injecction sql

esto si me esta funcionando

Código PHP:
$login=$_POST['login'];
    
$pass=$_POST['pass'];
     
$login addslashes($login);
    
$pass addslashes($pass); 
pero por que no me funciona esto

Código PHP:
    $login=$_POST['login'];
    
$pass=$_POST['pass'];
    
$login mysql_real_escape_string(($_POST['login']));
$pass mysql_real_escape_string(($_POST['pass'])); 

Última edición por vegas; 09/11/2015 a las 09:23
  #12 (permalink)  
Antiguo 09/11/2015, 12:54
 
Fecha de Ingreso: marzo-2015
Ubicación: jalisco
Mensajes: 10
Antigüedad: 9 años
Puntos: 0
Respuesta: no funciona codigo anti injecction sql

amigo me conseguí una función de un blog que yo mismo he probado y la verda esta muy bien y no solo preve ataques injección sql si no de otro tipo aun así te recomiendo el uso de consultas preparadas para mayor seguridad solo cuidado con los select

Cita:
function anti_xss($form){//limpiar formularios recibidos
foreach ($form as &$valor):
$valor= strip_tags($valor);
// General
$valor=str_replace("<","",$valor);
$valor=str_replace(">","",$valor);
$valor=str_replace("{","",$valor);
$valor=str_replace("}","",$valor);
$valor=str_replace("[","",$valor);
$valor=str_replace("]","",$valor);
$valor=str_replace("(","",$valor);
$valor=str_replace(")","",$valor);
$valor=str_replace("/","",$valor);
$valor=str_replace("\\","",$valor);

// PHP

$valor= str_replace("function" , "" , $valor);
$valor= str_replace("php" , "" , $valor);
$valor= str_replace("echo" , "" , $valor);
$valor= str_replace("print" , "" , $valor);
$valor= str_replace("return" , "" , $valor);

// HTML

$valor= str_replace("html" , "" , $valor);
$valor= str_replace("body" , "" , $valor);
$valor= str_replace("head" , "" , $valor);

// JS

$valor= str_replace("script" , "" , $valor);

// Ajax y Otros

$valor= str_replace("xml" , "" , $valor);
$valor= str_replace("version" , "" , $valor);
$valor= str_replace("encoding" , "" , $valor);

// CSS

$valor= str_replace("style" , "" , $valor);
endforeach;
unset($valor);
return $form;
}
Posdata: Me gustaría citar el dueño de esta función pero nunca anote la url seguro que con una buena búsqueda das con el.
  #13 (permalink)  
Antiguo 09/11/2015, 16:50
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: no funciona codigo anti injecction sql

muchas gracias amigo por ese codigo, tiene muy buena pinta. yo esta tarde le puse este otro que comparto con vosotros. funciona muy bien, manda un mensaje y deniega el acceso si detecta caracteres tipo ''or'=.........

yo lo puse en un archivo php aparte y luego en elel archivo conexion puse un require_once

aqui va el codigo:

Código PHP:
<?php

  $block_list 
= array("&","%","'","--",";","\""); foreach($_POST as $login) { foreach($block_list as $bloc_list_2) { if(substr_count(strtolower($login), strtolower($bloc_list_2)) > 0) {
  die (
"<script>alert('ALGUNOS CARACTERES INVALIDOS FUERON DETECTADOS. TU IP SERA GUARDADA POR SEGURIDAD!' );

  history.go(-1);</script>"
); } } } foreach($_GET as $login) {   foreach($block_list as $bloc_list_2) { if(substr_count(strtolower($valor), strtolower($bloc_list_2)) > 0) {
  die (
"<script>alert('ALGUNOS CARACTERES INVALIDOS FUERON DETECTADOS. TU IP SERA GUARDADA POR SEGURIDAD!');
  history.go(-1);</script>"
); } } } foreach($_COOKIE as $login) {   foreach($block_list as $bloc_list_2) { if(substr_count(strtolower($valor), strtolower($bloc_list_2)) > 0) {
  die (
"<script>alert('ALGUNOS CARACTERES INVALIDOS FUERON DETECTADOS. TU IP SERA GUARDADA POR SEGURIDAD!');
  history.go(-1);</script>"
); } } }
  
  
$block_list = array("&","%","'","--",";","\""); foreach($_POST as $pass) { foreach($block_list as $bloc_list_2) { if(substr_count(strtolower($pass), strtolower($bloc_list_2)) > 0) {
  die (
"<script>alert('ALGUNOS CARACTERES INVALIDOS FUERON DETECTADOS. TU IP SERA GUARDADA POR SEGURIDAD!');
  history.go(-1);</script>"
); } } } foreach($_GET as $pass) {   foreach($block_list as $bloc_list_2) { if(substr_count(strtolower($valor), strtolower($bloc_list_2)) > 0) {
  die (
"<script>alert('ALGUNOS CARACTERES INVALIDOS FUERON DETECTADOS. TU IP SERA GUARDADA POR SEGURIDAD!');
  history.go(-1); </script>"
); } } } foreach($_COOKIE as $pass) {   foreach($block_list as $bloc_list_2) { if(substr_count(strtolower($valor), strtolower($bloc_list_2)) > 0) {
  die (
"<script>alert('ALGUNOS CARACTERES INVALIDOS FUERON DETECTADOS. TU IP SERA GUARDADA POR SEGURIDAD!');
  history.go(-1);</script>"
); } } }
  

  
?>
lo que estoy intentando ahora es que si alguien pone codigo malicioso detecte la ip, etc... pero al ser un script el codigo anterior, cuando le doy a aceptar en el mensaje que sale del script me vuelve a la pagina login. asi que no se como voy a hacer para mostrar que he capturado la ip del usuario.

pero como te digo funciona muy bien.

de todas formas en la pagina de conexion tambien le puse este codigo por si acaso

Código PHP:
$login=addslashes($_POST['login']);
    
$pass=addslashes($_POST['pass']); 
yo creo que con lo que le he puesto y con el codigo que has puesto tu, hay mas que suficiente para los usuarios malintencionados nobeles.

un saludo y muchas gracias.

comentare cuando ponga tu codigo para decir como va.

un saludo y como dije, muuuuchaaaaassss graaaciiias por la ayuda.
  #14 (permalink)  
Antiguo 09/11/2015, 17:03
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: no funciona codigo anti injecction sql

lambetdelta cuando pongo tu codigo en mi pagina, se me queda en blanco, no me carga nada.

¿que tengo que poner en $form?

creo que es ahi donde no le estoy poniendo nada y creo que es por eso que no carga.

lo he puesto asi

Código PHP:
if(isset($_POST['login']) and isset($_POST['pass']) )
{

    
$login=$_POST['login'];
    
$pass=$_POST['pass'];
    
    function 
anti_xss($form){//limpiar formularios recibidos 
foreach ($form as &$login):
$loginstrip_tags($login);
// General 
$login=str_replace("<","",$login); 
$login=str_replace(">","",$login); 
$login=str_replace("{","",$login); 
$login=str_replace("}","",$login); 
$login=str_replace("[","",$login); 
$login=str_replace("]","",$login); 
$login=str_replace("(","",$login); 
$login=str_replace(")","",$login); 
$login=str_replace("/","",$login); 
$login=str_replace("\\","",$login); 

// PHP 

$loginstr_replace("function" "" $login); 
$loginstr_replace("php" "" $login); 
$loginstr_replace("echo" "" $login); 
$loginstr_replace("print" "" $login); 
$loginstr_replace("return" "" $login); 

// HTML 

$loginstr_replace("html" "" $login); 
$loginstr_replace("body" "" $login); 
$loginstr_replace("head" "" $login); 

// JS 

$loginstr_replace("script" "" $login); 

// Ajax y Otros 

$loginstr_replace("xml" "" $login); 
$loginstr_replace("version" "" $login); 
$loginstr_replace("encoding" "" $login); 

// CSS 

$loginstr_replace("style" "" $login); 
endforeach;
unset(
$login);
return 
$form;
}



function 
anti_xss($pass){//limpiar formularios recibidos 
foreach ($form as &$pass):
$loginstrip_tags($pass);
// General 
$pass=str_replace("<","",$pass); 
$pass=str_replace(">","",$pass); 
$pass=str_replace("{","",$pass); 
$pass=str_replace("}","",$pass); 
$pass=str_replace("[","",$pass); 
$pass=str_replace("]","",$pass); 
$pass=str_replace("(","",$pass); 
$pass=str_replace(")","",$pass); 
$pass=str_replace("/","",$pass); 
$pass=str_replace("\\","",$pass); 

// PHP 

$passstr_replace("function" "" $pass); 
$passstr_replace("php" "" $pass); 
$passstr_replace("echo" "" $pass); 
$passstr_replace("print" "" $pass); 
$passstr_replace("return" "" $pass); 

// HTML 

$passstr_replace("html" "" $pass); 
$passstr_replace("body" "" $pass); 
$passstr_replace("head" "" $pass); 

// JS 

$passstr_replace("script" "" $pass); 

// Ajax y Otros 

$passstr_replace("xml" "" $pass); 
$passstr_replace("version" "" $pass); 
$passstr_replace("encoding" "" $pass); 

// CSS 

$passstr_replace("style" "" $pass); 
endforeach;
unset(
$pass);
return 
$form;
}
    
    
$login=addslashes($_POST['login']);
    
$pass=addslashes($_POST['pass']); 
  #15 (permalink)  
Antiguo 10/11/2015, 01:42
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: no funciona codigo anti injecction sql

Hola vegas,

Cita:
Iniciado por vegas Ver Mensaje
lo que estoy intentando ahora es que si alguien pone codigo malicioso detecte la ip, etc... pero al ser un script el codigo anterior, cuando le doy a aceptar en el mensaje que sale del script me vuelve a la pagina login. asi que no se como voy a hacer para mostrar que he capturado la ip del usuario.
Yo lo que haría es guardarla desde el principio, después, si se detecta algún código malicioso, la añades además a una "lista negra".

Espero que te sirva.

Etiquetas: sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:38.