如何在PHP和MySQL中发现任何潜在的安全问题
因为我不是一个Php程序员,我不得不问你,我必须挑战调查一些目前受到攻击的源代码。它是一些本地新闻网站,里面有定制的cms。它的phg mysql位于共享linux托管环境下 管理员在登录表单中输入凭据时注册,这些凭据在db中被检查,如下所示:如何在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
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
?>