【问题标题】:How Can I Prevent MSSQL Injections in PHP?如何防止 PHP 中的 SQL 注入?
【发布时间】:2014-05-22 17:02:40
【问题描述】:

我知道这是一个被广泛讨论的话题,但在谷歌搜索 PHP 的 MSSQL 注入预防后,我几乎没有发现任何东西。

这是我能找到的最接近的answer,但似乎答案是MySQL 而不是MSSQL

我使用的 PHP 代码允许管理员通过表单输入登录网站以访问后端。此代码是提交表单后管理员登录的代码:

<?php
  session_start();

  if($_SERVER['REQUEST_METHOD'] == "POST") {
$conn=mssql_connect('d','a','d');
mssql_select_db('d',$conn);
if(! $conn )
{
  die('Could not connect: ' . mssql_get_last_message());
}

    $username = ($_POST['username']);
    $password = ($_POST['password']);

    $result = mssql_query("SELECT * FROM back_end WHERE username='$username' AND
      password='$password'");
  if(mssql_num_rows($result) > 0) {
      $_SESSION['is_logged_in'] = 1;
      $_SESSION['backname'] = $username;
    }
  }

  if(!isset($_SESSION['is_logged_in'])) {
    header("location:logingbm.php");
    echo "<script>alert('Incorrect log-in information!');</script>";
  } else {
    header("location:../d/index.php");
  }
?>

如果有人能给我一些提示,告诉我我应该输入什么代码来防止恶意注入,我将不胜感激。感谢您的帮助。

【问题讨论】:

  • 第 1 步 - 在用户进行查询之前验证所有用户输入。第 2 步 - 使用查询参数。
  • SQL 注入与否,此代码不会转义输入,即使是为了防止您的密码可能包含引号字符的简单 SQL 错误
  • 在标头重定向后也使用break;

标签: php sql sql-server forms sql-injection


【解决方案1】:

您使用的是较旧的 mssql 扩展程序。不是longer available as of PHP 5.3。取而代之的是 sqlsrv,该函数集包括运行 prepared statements 的功能,这是运行查询的最安全方式。

【讨论】:

  • 将密码和用户名限制为 [A-Za-z0-9],在运行查询之前验证它们是否匹配(如果不匹配则立即失败),并制定切换到 sqlsrv 的计划在这把你咬到别处之前。
猜你喜欢
  • 2018-03-23
  • 1970-01-01
  • 2015-09-07
相关资源
最近更新 更多