【问题标题】:Vulnerable to SQL injections易受 SQL 注入攻击
【发布时间】:2019-08-10 16:57:54
【问题描述】:

我正在做一个项目来寻找易受攻击的代码。这段代码 sn-p 是否容易受到 SQL 注入的攻击?

if(ISSET ($_POST['login'])){
    $username = $_POST['username'];
    $password = $_POST['password'];
    $query = $conn->query("SELECT * FROM `admin` WHERE `username` = '$username' && `password` = '$password'") or die(mysqli_error());

【问题讨论】:

  • 是的。认识Bobby Tables
  • 这是什么编程语言?
  • 它的 PHP。很抱歉应该提到这一点。

标签: security sql-injection


【解决方案1】:

是的。最好使用Mysqli的参数化查询方式。

<?php

    if (isset($_POST['user']) && isset ($_POST['pass'])) {

        $user = mysql_real_escape_string ($_POST['user']),
        $pass = mysql_real_escape_string ($_POST['pass']);
        $conn = new mysqli("$db_host", "$db_user", "$db_pass", "$db");
        $sql = "select * from admin where username=? and password=?";
        $cmd = $conn->prepare($sql);
        $cmd->bind_param("ss", $user, $pass);
        $cmd->execute();
         ......
         ......
    else {
        echo "Username and password cant not be null !";
    }
?>

【讨论】:

  • 您的答案中的错误:混合来自mysql 扩展和mysqli 扩展的函数。使用参数时,转义输入也是多余的。还以明文形式存储密码,尽管这是基于 OP 的帖子。无论如何,这段代码不是一个很好的例子。
猜你喜欢
  • 2015-10-03
  • 2013-05-21
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
相关资源
最近更新 更多