如何在PHP和MySQL中发现任何潜在的安全问题

如何在PHP和MySQL中发现任何潜在的安全问题,php,mysql,Php,Mysql,因为我不是一个Php程序员,我不得不问你,我必须挑战调查一些目前受到攻击的源代码。它是一些本地新闻网站,里面有定制的cms。它的phg mysql位于共享linux托管环境下 管理员在登录表单中输入凭据时注册,这些凭据在db中被检查,如下所示: <?php session_start(); include 'db.php'; $connection = mysql_connect($dbHost, $dbUser, $dbPass) or die(mysq

因为我不是一个Php程序员,我不得不问你,我必须挑战调查一些目前受到攻击的源代码。它是一些本地新闻网站,里面有定制的cms。它的phg mysql位于共享linux托管环境下

管理员在登录表单中输入凭据时注册,这些凭据在db中被检查,如下所示:

<?php
    session_start();
        include 'db.php';

    $connection = mysql_connect($dbHost, $dbUser, $dbPass) or die(mysql_error());
    mysql_select_db($dbName, $connection) or die(mysql_error());

        $queryString = "SELECT * FROM `Admins` WHERE `username` = '$user_name' AND password='$password'";
        $safeSelect = mysql_real_escape_string($queryString);

        $query = "SELECT * FROM `Admins`
            WHERE `username` = '$user_name' AND password='$password'";
    $result = mysql_query($query, $connection) or die('error making query');
    $affected_rows = mysql_num_rows($result);

        if($affected_rows == 1) {
        //add the user to our session variables
    $_SESSION['username'] = $user_name;
    header("Location: http://www.mysite.com/admin/index.php");
        exit;
        //print 'allowed';
        }
    else {
        print 'access is not allowed !!!';
    }
?>

No它不安全,它对一个字符串调用
mysql\u real\u escape\u string
一次,然后在实际查询中不使用该字符串


如果您不是PHP程序员,那么为什么要调查这个问题呢?

一下子就发现这里出现了SQL注入问题。POST请求被直接放入一个SQL查询中,该查询允许具有巧尽心思构建的POST请求的人在服务器上执行几乎所有的查询

这可能值得一看


希望这有帮助是的,它容易受到sql注入的攻击


正如其他人所指出的,存在SQL注入的机会。虽然使用mysql_real_escape_字符串也有助于防止sql注入,但我建议将整个mysql*抛在脑后,转而使用PDO,它可以使用预先准备好的语句,例如

整个代码都有严重的错误vulneability@safarov如何将这些代码读入一些PHP安全最佳实践,您可以发布登录页面的代码片段吗?特别是登录表单及其处理。数据库中的密码是否被置乱?你使用加密密码吗?$password的设置是否已转义?就像在mysql中一样,因为我需要修复这些问题,然后在其他平台上移动,在这里我是在home field上。Mvc3和Nhibernate。
<?php
    session_start();
    include 'db.php';
    if (empty($_SESSION['username'])) {
        die('to access these page you have to be registered user.
        <a href="/admin/login.php">log in</a>');
    }
?>
<?php
session_start();
include '/admin/db.php';
include '/admin/auth.php';
  ini_set("display_errors", 1);
    error_reporting(E_ALL);
    $dbcnx = mysql_connect('localhost', $dbUser, $dbPass);
    mysql_select_db($dbName);
    if (isset($_POST['submit'])):
        // content will be updated with these
        $id = $_POST['id'];
        $cats = $_POST['cats'];
        $newstext = $_POST['newstext'];

$sql = "UPDATE `News` SET
             `NewsText`='$newstext',
             `AID`='$aid',
         `imgID`='$imgID'
             WHERE `ID`='$id'";
 if (mysql_query($sql)) {
            echo('<p><b>content is succ. updated</b></p>');
        } else {
            die('<p>Error occured when updating content: ' .
                    mysql_error() . '</p>');
        }
else: // Allow user to edit content using ID=$id

            /* $aid = $_GET['aid']; */
             if (isset($_GET['id'])) {
                if (is_numeric($_GET['id']) == FALSE) {
                    echo "<h1>Page is not found</h1>";
                    session_destroy();
                return;
             }
                $id = $_GET['id'];
            }

$row = @mysql_query("SELECT `NewsText`, `Title`, `AID`, `imgID` FROM `News` WHERE `ID`='$id'");
            if (!$row) {
                die('<p>Db error: ' .
                        mysql_error() . '</p>');
            }
$row = mysql_fetch_array($row);
            $newstext = $row['NewsText'];
            $text = $row ['Title'];
            $authid = $row ['AID'];
            $imgID = $row ['imgID'];
            $newstext = htmlspecialchars($newstext);

//ommitting html form
?>