Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Безопасность скрипта / 10 сообщений из 10, страница 1 из 1
04.03.2021, 09:35
    #40050542
xokoki3608
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность скрипта
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
<?php
if (isset($_POST['name']) && isset($_POST['text'])){

    // Переменные с формы
    $name = $_POST['name'];
    $text = $_POST['text'];
    
    // Параметры для подключения
    $db_host = "localhost"; 
    $db_user = "asdl"; // Логин БД
    $db_password = "asd"; // Пароль БД
    $db_base = 'asd'; // Имя БД
    $db_table = "users"; // Имя Таблицы БД
    
    // Подключение к базе данных
    $mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);

    // Если есть ошибка соединения, выводим её и убиваем подключение
	if ($mysqli->connect_error) {
	    die('Ошибка : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
	}
    
    $result = $mysqli->query("INSERT INTO ".$db_table." (user,mail) VALUES ('$name','$text')");
    
    if ($result == true){
    	echo "Информация занесена в базу данных";
    }else{
    	echo "Информация не занесена в базу данных";
    }
}
?>

<html>
<head>
 <title>Запись в БД через форму на php</title>
</head>
<body>
 <form method="POST" action="">
  <input name="name" type="text" placeholder="Имя"/>
  <input name="text" type="text" placeholder="Текст"/>
  <input type="submit" value="Отправить"/>
 </form>
</body>
</html>




Помогите обезопасить скрипт
...
Рейтинг: 0 / 0
04.03.2021, 10:34
    #40050555
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность скрипта
xokoki3608
Код: php
1.
2.
3.
    // Переменные с формы
    $name = $_POST['name'];
    $text = $_POST['text'];

xokoki3608
Код: php
1.
'$name','$text'

Гуглить по словам "SQL-инъекция"
...
Рейтинг: 0 / 0
04.03.2021, 11:10
    #40050574
xokoki3608
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность скрипта
mysqli_real_escape_string($name) = $_POST['name'];
mysqli_real_escape_string($text) = $_POST['text'];

Так?
...
Рейтинг: 0 / 0
04.03.2021, 11:13
    #40050578
DHDD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность скрипта
xokoki3608,

Код: php
1.
2.
    $name = $mysqli->real_escape_string($_POST['name']);
    $text = $mysqli->real_escape_string($_POST['text']);
...
Рейтинг: 0 / 0
04.03.2021, 11:27
    #40050585
xokoki3608
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность скрипта
DHDD,

Fatal error: Call to a member function real_escape_string() on a non-object in Z:\home\localhost\www\index.php on line 5


авторif (isset($_POST['name']) && isset($_POST['text'])){

// Переменные с формы
$name = $mysqli->real_escape_string($_POST['name']);
$text = $mysqli->real_escape_string($_POST['text']);
...
Рейтинг: 0 / 0
04.03.2021, 11:35
    #40050591
xokoki3608
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность скрипта
автор<?php
if (isset($_POST['name']) && isset($_POST['text'])){

// Переменные с формы
$name = $mysqli->real_escape_string($_POST['name']);
$text = $mysqli->real_escape_string($_POST['text']);

// Параметры для подключения
$db_host = "localhost";
$db_user = "root"; // Логин БД
$db_password = ""; // Пароль БД
$db_base = 'register'; // Имя БД
$db_table = "user"; // Имя Таблицы БД

// Подключение к базе данных
$mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);

// Если есть ошибка соединения, выводим её и убиваем подключение
if ($mysqli->connect_error) {
die('Ошибка : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}

$result = $mysqli->query("INSERT INTO ".$db_table." (name,mail) VALUES ('$name','$text')");

if ($result == true){
echo "Информация занесена в базу данных";
}else{
echo "Информация не занесена в базу данных";
}
}
?>
...
Рейтинг: 0 / 0
04.03.2021, 13:54
    #40050637
DHDD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность скрипта
xokoki3608
Fatal error: Call to a member function real_escape_string


ну так сначала
Код: php
1.
    $mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);


а уже потом
Код: php
1.
2.
    $name = $mysqli->real_escape_string($_POST['name']);
    $text = $mysqli->real_escape_string($_POST['text']);
...
Рейтинг: 0 / 0
04.03.2021, 15:08
    #40050688
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность скрипта
xokoki3608 ,
1. Используй один тип кавычек для кода. Одинарные. Всегда.
2.
Код: php
1.
2.
3.
4.
5.
if ($result == true){
echo "Информация занесена в базу данных";
}else{
echo "Информация не занесена в базу данных";
}

это же неверно. Во-первых, false будет возвращено только в случае ошибки. Зачем тебе чтобы SQL ошибка возникала?
Во-вторых, если ошибки не было и SQL запрос выполнен, то результат будет не true, а mysqli ресурс. Оно конечно сработает с == (но не с ===), но всё-же приучай себя писать строгий код со строгими проверками чтобы реже садиться в лужи.
Ты же хочешь проверить условие "Что в таблицу была вставлена строка", так вот и проверяй результат mysqli_affected_rows
3. Замени на INSERT IGNORE, чтобы при дубликате username'ов была не ошибка а просто игнор.
...
Рейтинг: 0 / 0
09.03.2021, 15:12
    #40051945
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность скрипта
используй PDO и параметры
...
Рейтинг: 0 / 0
10.03.2021, 20:43
    #40052444
estic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопасность скрипта
kormot
Используй один тип кавычек для кода. Одинарные. Всегда.
О чем вы?

kormot
Во-первых, false будет возвращено только в случае ошибки. Зачем тебе чтобы SQL ошибка возникала?
:)

kormot
Во-вторых, если ошибки не было и SQL запрос выполнен, то результат будет не true, а mysqli ресурс.
Для INSERT будет true.

kormot
Ты же хочешь проверить условие "Что в таблицу была вставлена строка", так вот и проверяй результат mysqli_affected_rows
Зачем? Он же вставляет одну запись.

kormot
3. Замени на INSERT IGNORE, чтобы при дубликате username'ов была не ошибка а просто игнор.
Зачем? Из кода про дубликаты ничего не известно. Вполне возможно, что автора даже дубли e-mail устраивают. А если не устраивают, то такие ошибки точно не нужно игнорировать!
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Безопасность скрипта / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]