Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/10/2012, 14:59
kasumidie
 
Fecha de Ingreso: octubre-2011
Ubicación: CABA
Mensajes: 63
Antigüedad: 12 años, 6 meses
Puntos: 1
Panel Login Anti-SQl Inyection

Estoy con un panel el cual funciona, pero la idea es restringir los caracteres para evitar un Ataque SQL, la idea es realizarlo tanto en el Registro como en el Login, me dan una mano? Acá dejo los php.

Código PHP:
<?php
session_start
();
//datos para establecer la conexion con la base de mysql.
mysql_connect('localhost','xx','xx')or die ('Ha fallado la conexión: '.mysql_error());
mysql_select_db('xx')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
function 
quitar($mensaje)
{
    
$nopermitidos = array("'",'\\','<','>',"\"");
    
$mensaje str_replace($nopermitidos""$mensaje);
    return 
$mensaje;
}
if(
trim($_POST["usuario"]) != "" && trim($_POST["password"]) != "")
{
    
// Puedes utilizar la funcion para eliminar algun caracter en especifico
    //$usuario = strtolower(quitar($_POST["usuario"]));
    //$password = $_POST["password"];
    // o puedes convertir los a su entidad HTML aplicable con htmlentities
    
$usuario strtolower(htmlentities($_POST["usuario"], ENT_QUOTES));
    
$password $_POST["password"];
    
$result mysql_query('SELECT password, usuario FROM usuarios WHERE usuario=\''.$usuario.'\'');
    if(
$row mysql_fetch_array($result)){
        if(
$row["password"] == $password){
            
$_SESSION["k_username"] = $row['usuario'];
            echo 
'Has sido logueado correctamente '.$_SESSION['k_username'].' <p>';
            echo 
'<a href="index.php">Index</a></p>';
            
//Elimina el siguiente comentario si quieres que re-dirigir automáticamente a index.php
            /*Ingreso exitoso, ahora sera dirigido a la pagina principal.
            <SCRIPT LANGUAGE="javascript">
            location.href = "index.php";
            </SCRIPT>*/
        
}else{
  echo
'<script>alert("El usuario o contraseña son erroneos.");</script>';
  echo
'<SCRIPT LANGUAGE="javascript">
            location.href = "one.html";
            </SCRIPT>'
;
        }
    }else{
          echo
'<script>alert("El usuario o contraseña son erroneos.");</script>';
  echo
'<SCRIPT LANGUAGE="javascript">
            location.href = "one.html";
            </SCRIPT>'
;
    }
    
mysql_free_result($result);
}else{
     echo
'<script>alert("Debe especificar un usuario y password.");</script>';
 echo
'<SCRIPT LANGUAGE="javascript">
            location.href = "one.html";
            </SCRIPT>'
;
}
mysql_close();
?>
Código PHP:
<?php
session_start
();
//datos para establecer la conexion con la base de mysql.
mysql_connect('localhost','xxx','xx')or die ('Ha fallado la conexión: '.mysql_error());
mysql_select_db('xx')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
function 
formRegistro(){
?>
<form action="registrar.php" method="post">
Usuario (max 20): 
  <input type="text" name="username" size="20" maxlength="20" /><br />
Password (max 10): 
<input type="password" name="password" size="10" maxlength="10" />
Confirma: <input type="password" name="password2" size="10" maxlength="10" /><br />
Email (max 40): 
<input type="text" name="email" size="20" maxlength="40" /><br />
<input type="submit" value="Registrar" />
</form>
<?php
}
// verificamos si se han enviado ya las variables necesarias.
if (isset($_POST["username"])) {
    
$username $_POST["username"];
    
$password $_POST["password"];
    
$password2 $_POST["password2"];
    
$email $_POST["email"];
    
// Hay campos en blanco
    
if($username==NULL|$password==NULL|$password2==NULL|$email==NULL) {
        echo 
"un campo está vacio.";
        
formRegistro();
    }else{
        
// ¿Coinciden las contraseñas?
        
if($password!=$password2) {
            echo 
"Las contraseñas no coinciden";
            
formRegistro();
        }else{
            
// Comprobamos si el nombre de usuario o la cuenta de correo ya existían
            
$checkuser mysql_query("SELECT usuario FROM usuarios WHERE usuario='$username'");
            
$username_exist mysql_num_rows($checkuser);
            
$checkemail mysql_query("SELECT email FROM usuarios WHERE email='$email'");
            
$email_exist mysql_num_rows($checkemail);
            if (
$email_exist>0|$username_exist>0) {
                echo 
"El nombre de usuario o la cuenta de correo estan ya en uso";
                
formRegistro();
            }else{
                
$query 'INSERT INTO usuarios (usuario, password, email, fecha)
                VALUES (\''
.$username.'\',\''.$password.'\',\''.$email.'\',\''.date("Y-m-d").'\')';
                
mysql_query($query) or die(mysql_error());
                echo 
'El usuario '.$username.' ha sido registrado de manera satisfactoria.<br />';
                echo 
'Ahora puede entrar ingresando su usuario y su password <br />';

?>
Repito todo funciona, el problema está en que deja poner caracteres como >@/*+- lo que sea, y la idea es que no vayan a realizarle Sql inyection.