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.