Hamed Sahraei Ответов: 2

Как защитить мою PHP-форму


<?php
session_start();
require('connect.php');
if (isset($_POST['username']) and isset($_POST['password'])){
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM `user` WHERE username='$username' and password='$password' and uid=1";
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
$count = mysqli_num_rows($result);
if ($count == 1){
$_SESSION['username'] = $username;
}else{
//3.1.3 If the login credentials doesn't match, he will be shown with an error message.
$fmsg = "Invalid Login Credentials.";
}
}
if (isset($_SESSION['username'])){
$username = $_SESSION['username'];
header('Location: user-register.php');?>
<?php }else{
//3.2 When the user visits the page first time, simple login form will be displayed.
?>
<div class="container">
      
      <?php if(isset($fmsg)){ ?><div class="alert alert-danger"> <?php echo $fmsg; ?> </div><?php } ?>
        <h2 class="form-signin-heading">admin Login page</h2>
        <div class="input-group">
    <span class="input-group-addon" id="basic-addon1">username:</span>
    
  </div>
          <div class="input-group">
        Password
          <span class="input-group-addon" id="basic-addon1">Password:</span>
        
          </div>
        Login
      
</div>


Что я уже пробовал:

для имени пользователя электронной почты и пароля или чего нибудь еще

2 Ответов

Рейтинг:
2

W∴ Balboos, GHB

Похоже, что много вырезано/вставлено откуда-то.

Что вы пытались найти в этой ошибке - кроме публикации здесь?

Когда вы копируете код откуда-то, вы должны по крайней мере прочитать о том, что он должен делать. В коде слишком много тонкостей, чтобы ты казался таким невежественным и все же написал его.


P.S. вход в корневую учетную запись, за исключением особых обстоятельств, если это очень плохая практика.


Рейтинг:
2

Patrice T

$query = "SELECT * FROM `user` WHERE username='$username' and password='$password' and uid=1";

Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]


Hamed Sahraei

могу ли я исправить эту проблему с помощью msqli_real_escape_srting ?

Patrice T

Я не использую SQL.
Я просто знаю достаточно, чтобы заметить такую проблему.

Patrice T

mysqli_real_escape_string иногда может помочь, но этого может быть недостаточно.
Это не поможет, если числовое значение будет заменено вредоносным кодом.