Ayuda Consejos Para Evitar SQL INJECTION

Iniciado por SrTrp, 19 Febrero 2017, 01:19 AM

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

SrTrp

Bueno me acaban de hacer una SQL injection, y se logearon en mi cuenta de administrador, y decidi agregarle cifrado a mis contraseñas tambien captchas, que me recomiendan para hacer un bloqueo y evitar estos SQL INJECTIONS uso en mi login el metodo $_POST pero me dijieron que es mejor el metodo $_GET, si me pudiesen dar unos consejos para como poder bloquear las puertas mas faciles para evitar estos SQL injections.

engel lex

Citaruso en mi login el metodo $_POST pero me dijieron que es mejor el metodo $_GET

quien te dijo eso consume drogas baratas... lo haces por get y todas las contraseñas quedarán guardadas como url en el historial...

para evitar sql inyection, se evita en lo posible cualquier pase de datos directos enter post y la DB

poe ejemplo para usuario

Código (php) [Seleccionar]
$user = $_POST["user"];
$pass = $_POST["pass"];
//aquí el usuario será convertido a una representación hexadecimal
$variable_segura = bin2hex($user);

//se pasa como hexadecimal a la db y se pide que la compare quitando el hexadecimal y comparando en "binario"
$sql = "SELECT pass FROM users WHERE name = UNHEX('$variable_segura')";

// ejecutar sql....

if(password_verify($pass, $resultado_sql)){
 echo "usuario correcto";
}else{
 echo "usuario incorrecto";
}


hay más aproximaciones que usar hexadecimal, puedes usar prepared query, puedes usar base 64, puedes guardar los usuarios como hash... etc

claro para esto tuviste que guardar tus contraseñas en tu DB usando password_hash

Código (php) [Seleccionar]
$hash = password_hash($contraseña_a_salvar, PASSWORD_DEFAULT);
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

SrTrp

#2
Eso viene siendo para el loggearse verdad?
yo estoy usando la función htmlspecialchars para los caracteres pero igual se mejoraría  pasarlo a hexadecimal?
Código (php) [Seleccionar]

<?php
function antiscript($DG) {
  
$DGtrim($DG);
  
$DGstripslashes($DG);
  
$DGhtmlspecialchars($DG);
  return 
$data;
}
 include (
"Encoding.php");
require("conex.php");

$usernameantiscript($_POST['usuario']);
$passantiscript($_POST['pass']);
  
$sql=mysql_query("SELECT * FROM users WHERE usuario='$username'");

if($f=mysql_fetch_array($sql)){
   $descript Encrypter::decrypt($f['password']);
  
if($pass==$descript){
    session_start();
   $_SESSION['id']=$f['id'];
$_SESSION['usuario']=$f['usuario'];
?>


Cita de: engel lex en 19 Febrero 2017, 02:09 AM
hay más aproximaciones que usar hexadecimal, puedes usar prepared query, puedes usar base 64, puedes guardar los usuarios como hash... etc

claro para esto tuviste que guardar tus contraseñas en tu DB usando password_hash

Código (php) [Seleccionar]
$hash = password_hash($contraseña_a_salvar, PASSWORD_DEFAULT);

para cifrar las contraseñas las hago de esta manera, cual sería la mas a decuada la que me has mencionado o esta?

Código (php) [Seleccionar]

public static function encrypt ($SA) {
       $EN= base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5(Encrypter::$Key), $SA, MCRYPT_MODE_CBC, md5(md5(Encrypter::$Key))));
       return $EN;
   }


También me han recomendado implementar el $_SERVER para evitar los ataques XSS pero no se como implementarlo en mi formulario.
Código (php) [Seleccionar]
action="<?=$_SERVER['PHP_SELF'];?>">


· No hagas doble post, usa el botón modificar
>aquí las reglas del foro
-Engel Lex

engel lex

en general el metodo de cifrado está bien pero lo veo sobre elaborado... el que te dí es simple y directo, guarda un password normalmente en blowfish + salt

no uses mysql está ya obsoleto! si estnas al manual de php verás esto por todos lados




con el hex, no hay inyección que pase, ya que el contenido es convertido a una representación hexadecimal y luego su reconversión es comparada... para que pueda inyectarse, se necesita que al query llegue algún contenido interpretable por mysql, y en este caso, no lo hará
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

SrTrp

Ooo ya lo cambiare a mysqli en cuanto pueda  :(
Ya implemente lo de hexadecimal de los usuarios gracias  ;-)
En cuanto lo del
Código (php) [Seleccionar]
action="<?=$_SERVER['PHP_SELF'];?>"> como puedo integrarlo ya que quisiera también aprevenir para los XSS :P

engel lex

los xss es donde tengas cosas que los usuarios guarden en la base de datos y luego se muestre, o donde algún parametro get o post se muestre en el html... donde tienes algo de eso, no hay una solución universal a xss si no, fuera una función integrada a php y listo XD
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

SrTrp

Cita de: engel lex en 19 Febrero 2017, 03:18 AM
los xss es donde tengas cosas que los usuarios guarden en la base de datos y luego se muestre, o donde algún parametro get o post se muestre en el html... donde tienes algo de eso, no hay una solución universal a xss si no, fuera una función integrada a php y listo XD
Ooo Gracias por la explicación y por la solución que me diste me ah servidor