故意不安全的php登录-方向不清楚

故意不安全的php登录-方向不清楚,php,sql,security,login,sql-injection,Php,Sql,Security,Login,Sql Injection,对于一个网站漏洞类,我们的任务是使用mysql数据库设计一个php登录,该数据库可被故意利用。虽然我有一些基本的编程知识,并且我有一个“正常”的登录页面,但我不确定如何使它不安全?也就是说,我输入的任何SQL注入类型查询似乎都不被接受,当我运行诸如“SQL注入我”之类的附加组件时,它也没有发现任何问题。我了解如何清理用户输入、发布和查询服务器等概念。。。但我并没有非常困难的时间让它“可黑客”。相信我,我们花了好几个小时来调整和尝试不同的东西,但都无济于事。我想我只是在概念上很难理解这一点,所以我

对于一个网站漏洞类,我们的任务是使用mysql数据库设计一个php登录,该数据库可被故意利用。虽然我有一些基本的编程知识,并且我有一个“正常”的登录页面,但我不确定如何使它不安全?也就是说,我输入的任何SQL注入类型查询似乎都不被接受,当我运行诸如“SQL注入我”之类的附加组件时,它也没有发现任何问题。我了解如何清理用户输入、发布和查询服务器等概念。。。但我并没有非常困难的时间让它“可黑客”。相信我,我们花了好几个小时来调整和尝试不同的东西,但都无济于事。我想我只是在概念上很难理解这一点,所以我可能没有朝着正确的方向前进

如果有人愿意给我指出正确的方向,或者给我一些建议,我会非常感激

这些都是基本的SQL注入攻击,我正试图让它在这里容易受到攻击

    <?php
session_start();
// store session data
$_SESSION['views']=1;
?>

    <?php
    //retrieve session data
    // echo "Pageviews=". $_SESSION['views'];
    ?>

<?php
// Create connection
$con=mysqli_connect("localhost","root","","logins");
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
  $i=0;
  $userName = $_POST['username'];
  $userPass = $_POST['password'];

$result = mysqli_query($con,"SELECT * FROM users");

while($row = mysqli_fetch_array($result)){
    if($_POST['username'] == $row['Username'])
    {
    $i++;}
    if($_POST['password'] == $row['Password'])
    {
    $i++;}
    }

if($i>1){
echo "Winner";
}
else{
echo "Loser";}
//echo $row['Username'] . " " . $row['Password'];
//echo "<br>";


  //echo "<br>";
  //echo $_POST['username'];
  //echo "<br>";
  //echo $_POST['password'];
 // echo "<br>";


?>

我正在尝试的另一种方法是:

<?php
session_start();
// store session data
$_SESSION['views']=1;
?>

    <?php
    //retrieve session data
    // echo "Pageviews=". $_SESSION['views'];
    ?>

<?php
// Create connection
$con=mysqli_connect("localhost","root","","logins");
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$verify = mysqli_query($con,"SELECT * FROM users");

while($row = mysqli_fetch_array($verify))
  {
    if (($_POST["username"] == $row['Username']) and ($_POST["password"] == $row['Password']))
        {
        echo "Winner " .$row['Firstname']." " .$row['Lastname'];
        }

        else
        {
        echo "Failure";
        }
    }

mysqli_close($con);
?>

要使一段代码对SQL注入开放,只需获取用户输入(通常来自表单)并将其传递到数据库而无需转义

由于输入没有转义,用户可以中断预期的查询

PHP/MySQL中最基本的例子如下:

$mysqli->query("SELECT * FROM some_table WHERE some_column = '{$_POST['some_field']}'");
在您的示例中,它将把发布的用户名/密码传递给数据库查询,而不转义它

mysqli
中,为了防止SQL注入,您可以使用或


对于登录系统,通常最好的做法是查询数据库并查看是否找到匹配项,而不是遍历存储的每个用户名和密码以查看是否存在匹配项。想象一下,如果有一百万个用户帐户。这样,您也不需要从数据库传输用户名/密码,因为您只需选择1并查看返回的行数即可。这使得代码更干净、更快、更安全

您的代码不易受到SQL注入的攻击,因为您没有任何查询输入。您的查询是静态的
SELECT*FROM users
。要使它们易受攻击,您需要未过滤的输入,如
“SELECT*FROM username='{$\u POST['username']}'”
您应该在查询中直接将输入抛出到db,以使其不安全,并且不要在if条件下使用它们。在这里查看这个有用的答案哇,反应真快!我来试试看!谢谢太好了,你可以用任何人的密码登录:-/wow。。。甚至都没想过那个垫子,我猜这是一个自身的弱点,哈哈。谢谢