他们告诉我,这个登录是脆弱的,但我不知道如何使它安全,我寻求帮助,如果有人想帮助我,我真的很感激。
当我在它输入的登录表单中将"1‘或1=1限制1#“添加到密码中时。
以下是代码:
<?php
session_start();
include 'inc/header.php';
include 'panel_funciones.php';
$usuario = $_POST["nombre"];
$pass = $_POST["pass"];
try {
$bd = new PDO("mysql:host=localhost;dbname=b9_16267033_1","b9_16267033","12346");
$bd->query("SET NAMES 'utf8'");
} catch (Exception $e){
echo "No se ha podido conectar";
exit;
}
try{
$sql= "SELECT usuario, pass FROM usuarios WHERE usuario='$usuario' and pass='$pass'";
}catch(Exception $e){
echo "Error en consulta";
exit;
}
$iniciosesion = $bd->query($sql);
$result = $iniciosesion->fetchAll();
$contar = count($result);
// AQUI COMIENZA COMPROBACIÓN
if ($_SESSION['Logueado'] = TRUE) {
panel();
}
elseif ($contar == 1) {
$_SESSION['Logueado'] = TRUE;
panel();
}
else{
echo "El usuario o contraseña es incorrecto";
}
include 'inc/footer.php';
?>
发布于 2015-05-30 22:55:05
本页有几个众所周知的问题:
' or 'a'='a',在这种情况下,我可以进入。因为'a'='a'。此外,它还允许我执行各种查询。就像'; DROP TABLE usuarios。最好始终使用准备语句(或类似的东西),在这里您不自己输入参数。准备好的语句将转义参数,因此不能将SQL注入这些参数。
您应该使用准备好的语句;类似于:
$sql= "SELECT,从usuario=?和pass=?处传递出去“;$stm =$bd->$stm($sql);$stm->execute(数组($usuario,$pass));$result = $stm->fetchAll();$contar = count($result);if语句中的赋值:
如果($_SESSION‘’Logueado‘= TRUE) { == (){$_SESSION’‘Logueado’= TRUE;
在这里,将TRUE分配给您的$_SESSION变量。一个更好的办法是:
if($contar == 1) {$_==‘’Logueado‘= TRUE;}if($_==’‘Logueado’){==();另一个方面:你不能让网页不受攻击:黑客最终很有可能会找到规避许多保护措施的方法。保安不是“是”或“否”。关键是,你必须让大多数黑客在绕过安全方面失败是非常困难的。
https://stackoverflow.com/questions/30552066
复制相似问题