Я использовал MySQL раньше, и мне сказали, что это небезопасно, так что теперь я перекодировал панель входа администратора в PDO, которую пользователи здесь и другие форумы не могут быть введены. Но хакер все еще попадает ... Я редактировал страницу после входа в систему и сказал взломанному, чтобы рассказать мне, что я надел, и хакер сказал мне ...Является ли мой код безопасным для инъекций?
Мне нужно знать, мой код безопасно. Он говорит мне, что он входит в SQL.
Итак, сначала я сохранил свой IP во время сеанса, так что если изменения их IP он будет регистрировать их (или имя пользователя)
if (isset($_SESSION['last_ip']) == false)
{
$_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR'];
}
if ($_SESSION['last_ip'] !== $_SERVER['REMOTE_ADDR'])
{
session_unset();
session_destroy();
}
Тогда вот мой Логин:
session_start();
include 'functions/functions.php';
$db = mysqlconnect();
$password = md5($_POST['mypassword']);
$mod = 1;
$statement = $db->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$statement->execute(array($_POST['myusername'],$password));
$result = $statement->fetchObject()->mod;
$count = $statement->rowCount();
if ($result == 1) {
$db = mysqlconnect();
// Register $myusername, $mypassword and redirect to file "login_success.php"
$_SESSION['user'] = $_POST['myusername'] ;
//Test if it is a shared client
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip=$_SERVER['HTTP_CLIENT_IP'];
//Is it a proxy address
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip=$_SERVER['REMOTE_ADDR'];
}
$sqll = "UPDATE users SET lastip=? WHERE username=?";
$q = $db->prepare($sqll);
$q->execute(array($ip,$_SESSION['username']));
$_SESSION['user'] = $_POST['myusername'] ;
$sqlll = "INSERT INTO user_log (username,ip) VALUES (?, ?)";
$qq = $db->prepare($sqlll);
$qq->execute(array($_SESSION['username'],$ip));
header("Location: home.php");
} else {
echo "Wrong Username or Password";
}
Может код вводиться?
И это моя страница home.php, которая не позволяет пользователям просматривать его.
/// My conenct is here
$sql = "SELECT * FROM users WHERE username='$_SESSION[user]'";
$result = mysql_query($sql) or die(mysql_error());
$values = mysql_fetch_array($result);
if(isset($_SESSION['user'])) {
} else {
echo "Bye Bye";
die;
}
if ($values['mod'] == 1) {
echo "welcome";
} else {
echo"Your account has been reported for hacking";
die;
}
Вы должны проверить правильность форматирования '$ _POST ['myusername']' перед его использованием в SQL. Простой 'preg_match()' должен быть достаточным или вы могли бы сбежать от него к другой переменной, а затем выполнить поиск переменной. Кроме того, откуда происходит '$ _SERVER ['HTTP_CLIENT_IP']? – ghoti
Я думал, что в pdo вам не нужно форматировать переменные? – user1405062
Что делает хакер? Почему вы говорите «он попадает», и почему вы думаете, что это SQL-инъекция? – Robbie