Создать ответ 
Обращение к БД по хешу ID
Автор Сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #1
Обращение к БД по хешу ID
Доброе время суток Smile,

Давно уже думал, как защититься не только от ботов, но и от людей, так как все данные можно "подсмотреть" в файле "data.php", где хранятся, например контакты, сообщения и т.д.

Подключение к БД стандартное:
Код:
<?php
$db=mysqli_connect("localhost","-----","-----","-----") or die();
$res=mysqli_query($db,"set names utf8", $link);
?>

Где-то я встречал, на сайте вы говорили что было бы правильней обращаться к БД не по id, а, например, по общему MD5 хешу id и в итоге избавимся от перебора всей базы по id, вот я и решил создать такую тему, так как думаю многим будет это интересно, если будет возможность защитить свои данные, да и хотелось бы реализовать что-то подобное и для себя, конечно не без вашей помощи.

Заранее благодарен Yes.
11.12.2015 22:56:31
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #2
RE: Обращение к БД по хешу ID
Вы наверно говорите про комментарий №1890 из темы Показать скрытые данные по клику мышки.

Так вот принцип очень прост.
Предположим, что в БД у Вас имеются следующие столбцы: id, name, tel.
id - номер записи (автоинкремент);
name - имя юзера;
tel - телефон юзера.

В скрипте мы получали номер телефона из файла show_data.php передавая значение id записи:
Код:
jQuery.post("show_data.php",{id:id_elem},show_phone);

Для защиты от перебора необходимо добавить в БД еще одно поле, например, md5.
На этапе добавления в БД записей, необходимо предварительно сгенерировать md5 хэш данной записи и поместить его в поле md5.

Генерировать предлагаю так:
$tel=9999999999;
$name='Kot';

$md5=md5($tel.$name);

Как Вы понимаете, в переменные $tel и $name необходимо помещать данные, которые будут записываться в БД. В результате в поле md5 будет помещено значение 8fbe9c79844b32e2b2f0e97787c3d27d. Вот этот md5 хэш и надо использовать в качестве id элемента при клике по которому его значение будет передано в файл show_data.php.
12.12.2015 15:29:07
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #3
RE: Обращение к БД по хешу ID
Доброе время суток, не совсем понял как реализовать данный момент, тем более у меня немного по другому.
Скриншот таблицы в базе:

[Изображение: tid_349_1.png]

Создал поле md5, но точно не знаю как правильно для него прописать тип, длина и т.д.

Имеется (в моем случае) data.php и feedback.js файлы.

Feedback.js:
Код:
$(document).ready(function(){
$(".skype>*").click(function(){
    id_elem=$(this).parent().attr("id");
    jQuery.post("../php/data.php",{id:id_elem,type:"skype"},show_skype);
});
function show_skype(data){
    $("#"+id_elem+".skype").fadeOut(500, function(){ $(this).html(data).fadeIn(500); });
}    
    
/* код для phone */

/* код для mails */
});

Data.php:
Код:
<?php
$db=mysqli_connect("localhost","admin","pswd","acad");
//  $res=mysqli_fetch_array(mysqli_query($db,"SELECT phone FROM data WHERE id=1")); browser data.php access
//  $res=mysqli_fetch_array(mysqli_query($db,"SELECT phone FROM data WHERE id=".(int)$_POST["id"]."")); for 1 object, phone or mail

//if ($_POST["type"]=="skype") $res=mysqli_fetch_array(mysqli_query($db,"SELECT skype_id FROM data WHERE id=".(int)$_POST["id"].""));
//if ($_POST["type"]=="phone") $res=mysqli_fetch_array(mysqli_query($db,"SELECT phone_id FROM data WHERE id=".(int)$_POST["id"].""));
//if ($_POST["type"]=="mails") $res=mysqli_fetch_array(mysqli_query($db,"SELECT mails_id FROM data WHERE id=".(int)$_POST["id"].""));

if ($_POST["type"]=="skype") {
$res=mysqli_fetch_array(mysqli_query($db,"SELECT skype FROM dwg_contacts WHERE id=".(int)$_POST["id"].""));
$res[0]='<span title="Логин">'.$res[0].'</span>';
}
// код для phone

// код для mails
echo $res[0];
?>

Ну и html разметка выглядит так:
Код:
<span class="skype" id="2"><a>Скайп</a></span>
<!-- код для phone -->
<!-- код для mails -->

В таком случае, все работает, но как правильно добавить поле md5 и что поменять в самих файлах, тут есть затруднения, вроде все понятно объяснили, но поскольку с этим имею дело в 1 раз, то сложно реализовать, такой для кого-нибудь простой момент...

Спасибо за ответ и заранее благодарен.
12.12.2015 17:17:16
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #4
RE: Обращение к БД по хешу ID
Тип поля md5 - CHAR длиной 32 символа.

Так вот, когда Вы добавляете в БД записи, необходимо в поле md5 добавлять результат выполнения функции md5($mails.$skype); (высчитываем md5 хэш по почте и скайпу).

В html коде необходимо вместо id="2" вставить md5 хэш соответствующей записи, предварительно полученной из БД. Например:
Код:
<span class="skype" id="8fbe9c79844b32e2b2f0e97787c3d27d"><a>Скайп</a></span>

В Data.php выборку нужно делать не по id, а по md5:
Код:
$res=mysqli_fetch_array(mysqli_query($db,"SELECT skype FROM dwg_contacts WHERE md5=".$_POST["id"].""));
12.12.2015 17:31:50
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #5
RE: Обращение к БД по хешу ID
Цитата:когда Вы добавляете в БД записи, необходимо в поле md5 добавлять результат выполнения функции md5($mails.$skype); (высчитываем md5 хэш по почте и скайпу).

Все понял, кроме самой сути, так как все-таки добавить в поле md5 результат выполнения функции md5($mails.$skype); как далее все понятно, а вот как высчитать хэш - нет.
Просьба пояснить, реализовать смостоятельно пока не выходит...
12.12.2015 19:34:22
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #6
RE: Обращение к БД по хешу ID
Все просто. У Вас же пользователь вводит свою почту и скайп, и жмет кнопку отправить (ну или другую). Данные приходят к Вам на сервер, где вы высчитывает $md5=md5($mails.$skype); При условии, что Вы полученные POST данные поместили в переменные $mails и $skype.
md5() - стандартная функция PHP.
Теперь у Вас имеется md5 хэш в переменной $md5.
Далее Вы как обычно заносите в БД введенные пользователем почту, скайп и полученный md5 хэш из переменной $md5. Все.
12.12.2015 19:39:25
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #7
RE: Обращение к БД по хешу ID
В базу данных в поле md5 добавил сгенерированные данные skype, email и телефона. С этим все понятно, но и еще вопрос:
Цитата:Данные приходят к Вам на сервер, где вы высчитывает $md5=md5($mails.$skype); При условии, что Вы полученные POST данные поместили в переменные $mails и $skype

Я как понимаю POST данные поместить нужно в переменные $mails,$skype $phone соответственно и нужно все преобразования делать в data.php, например:

Код:
if ($_POST["type"]=="skype") {
$res=mysqli_fetch_array(mysqli_query($db,"SELECT $skype FROM dwg_contacts WHERE md5=".$_POST["id"].""));
$res[0]='<span>'.$res[0].'</span>';
}

Что я сделал:
1. В БД добавил поле md5
2. Сгенерировал данные почты, телефона и email и в поле md5 добавил.
3. В data.php заменил строчку:
$res=mysqli_fetch_array(mysqli_query($db,"SELECT skype FROM dwg_contacts WHERE id=".(int)$_POST["id"].""));
на:
$res=mysqli_fetch_array(mysqli_query($db,"SELECT skype FROM dwg_contacts WHERE md5=".$_POST["id"].""));
4. В html вместо id вставил сгенерированный код поля md5/
5. Далее нужна ваша помощь, куда и как надо данные помещать в переменные. Нужно везде переименовать skype на $skype или только в data.php

и со строчкой $md5=md5($mails.$skype); непонятно, где она должна быть.

Заранее благодарен.
12.12.2015 20:25:33
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #8
RE: Обращение к БД по хешу ID
Что-то уже перемудрили...

Цитата:2. Сгенерировал данные почты, телефона и email и в поле md5 добавил.
Что конкретно Вы добавили в поле md5? Туда нужно добавить результат работы функции md5(); Т.е. в БД Вы должны записать примерно так:
PHP код:
$md5=md5($_POST["mails"].$_POST["phone"].$_POST["skype"]);
$res=mysqli_query($db,"INSERT INTO dwg_contacts (mails,phone,skype,md5) values (".$_POST["mails"].",".$_POST["phone"].",".$_POST["skype"].",".$md5.")"); 

skype на $skype переименовывать не надо!

Не пытайтесь усложнить. Ваш 5-й пункт не нужен.
12.12.2015 22:12:58
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #9
RE: Обращение к БД по хешу ID
В поле md5 я добавлял (3 поля) сгенерированные данные skype, email и телефона

например, skype - ff8b1ed2fb2b3e5bcd505f22e94d0497, в html вместо id ff8b1ed2fb2b3e5bcd505f22e94d0497, вышеприведенный код каким-образом вставлять в базу если полей 3, что-то туплю такой простой момент не могу реализовать...
12.12.2015 22:34:12
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #10
RE: Обращение к БД по хешу ID
Так $md5=md5($_POST["mails"].$_POST["phone"].$_POST["skype"]); и делает хэш сразу всех трех полей!
При помощи данной строчки мы объединяем значения трех полей в одну строку и считаем хэш!
12.12.2015 22:52:28
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru