Данный которым можно доверять

Bermuda

Новичок
Данные которым можно доверять

На днях меня осенила одна параноидальная идея.

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

Вопрос: почему можно доверять данным базы данных? Или по-другому: как реализовать цифровую подпись данных в базе?

Шифровать данные, например, с помощью md5 не прокатывает, так как нужно их еще будет читать.

Есть частичное решение:
$подпись_текущей_записи = md5 ($значение_1 + ... + $значение_n + $секретная_переменная);

после чего пихаем в базу:
INSERT INTO имя_таблицы SET value_1 = '$значение_1', ..., value_n ='$значение_n', podpis = '$подпись_текущей_записи';

Потом при чтении записи из базы проверяем условие:
if ($podpis <> md5 (value_1 + ... + value_n + $секретная_переменная))
то таким данным доверять нельзя.

Скажите а смысл?

Смысл в том, что теперь не нужно прятать все данные в базе, достаточно куда-нибудь задевать $секретную_переменную.

Короче вопрос в том, почему мы должны доверять данным в базе данных.

Решив этот вопрос частично снимется проблема дырявых скриптов работающих с базой данных, так как в случае изменения данных в базе кулхацкером они уже не будут доверяемыми.

У кого-нибудь есть мысли на эту тему?
 

Tronyх

Новичок
Хацкер и правдо должен быть кулом чтобы обойти всю защиту сервера и украсть/изменить данные в базе, тогда что ему мешает подсмотреть твою $супер_секретную_переменныю спрятаную чёрт знает где? Это не выход, но всё же можно файл с твоей переменной закриптить зенд энкодером, а если верить разработчикам этот код не расшифровывается, следовательно переменную тогда не подсмотреть. ИМХО но это удаление гланд через задний проход.
 

Bermuda

Новичок
Спрятать одну переменную проще, чем целую базу. Zend как вариант, но чисто символический. Исходного кода мы не получим, а вот насчет значения переменных и констант я не уверен -- возможно можно получить.

Я предложил лишь решение которое мне пришло в голову. Одну переменную защитить гораздо легче чем целую базу данных. Также я пытаюсь расматривать данный вопрос применительно к дырам в скриптах. Для того чтобы ковырнуть базу через дыру в скрипте большого ума не надо.

Буду рад услышать еще мнения.
 

Макс

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

А забота программиста - это именно дыры в скриптах
 

[VS]

Guest
Я не понял чего вообще человек боится?
Если скачали его базу - имхо хуже не очень куда
 

shingrus

Guest
Автор оригинала: [VS]
Я не понял чего вообще человек боится?
Если скачали его базу - имхо хуже не очень куда
человек хочет, чтобы вор зашедший в его дом, не нашёл ключа для сейфа, где капусту он спрятал!
 

Bermuda

Новичок
Еще раз повтряю вопрос:
Как осуществить подпись каждой записи в базе?

А пофлудить я и сам могу неплохо. Если нечего сказать, лучше ничего и не говорить вовсе.
 

Макс

Старожил PHPClub
Bermuda
если хакер получит доступ к твоей БД, он в ней ничего изменять не будет.
Он просто сделает DROP TABLES для всех таблиц

Если тебе станет от этого легче, твой вариант с подписью выглядит рабочим (если надежно защищена $секретнаыя переменная).
 

shingrus

Guest
ну зашифруй всё с закрытым ключом, а открывай открытым... проблема-то в том, куда спрятать закрытый ключ, а это уже флейм.
 

[VS]

Guest
Автор оригинала: Bermuda
Еще раз повтряю вопрос:
Как осуществить подпись каждой записи в базе?
А пофлудить я и сам могу неплохо. Если нечего сказать, лучше ничего и не говорить вовсе.
Имхо ты не с той стороны копаешь. Если у тебя такая серьезная информация, то не хранит это на шаренном хостинге, плати за коллокэйшн. Если совсем боишся или совсем серьезная инфа - используй криптование на уровне базы данных или на уровне файловой системы.

То что ты пытаешся сделать - имхо бесполезная трата времени.
 

MDG

Guest
У меня сходная ситуация, и я долго над этой проблемой парился. Решил сделать доступ по ssl каналу, с аутентификацией по сертификатам, кроме того:
У каждого моего юзера есть сертификат и открытый ключ, копия которого хранится в далекой и доступной только с сервака БД. После того как этот юзер зашел на сайт и аутентифицировался, из его сертификата берется ключик и сверяется с БД, если они совпадают, идем дальше и разрешаем ему чегото - там через скрипт занести в базу, а потом это дело подписываем его ключиком. Далее у меня есть скриптик, к-рый просто делает проход по БД, и смотрит если запись в поле этого юзера подписана не его подписью, она попросту удаляется и мне об этом сообщается.
Это конечно не вариант, но кулхацкеру в этом случае придется ломать 2 базы, одна из к-рых труднодоступна, кроме того ему нужно попытаться подделать сертификат, потому, как открытый ключ подписан моим ключем и кулхацкеру придется ломать мой 128 битный ключик а это не просто!

Не претендую на абсолютную защищенность, просто на мой взгляд этот вариант самый надежный из всех, о которых я задумывался. Конечно есть дыры, не в скриптах, здесь это не поможет, я имею в виду дыры в ssl, но это уже немного другой разговор и ведь, всеравно, выше головы не прыгнешь, если кто-то придумал как защититься, обязательно найдется по крайней мере 2 чела, которые придумают как это поломать :)
 

Ямерт

The Old One
База данных, достойная доверия - имхо, результат работы хорошего системного администратора. А когда об этом думает программист - в этом и правда есть нечто параноидальное с его стороны :) (сказал Ямерт и поставил Black Sabbath - "Paranoid")
 

Bermuda

Новичок
И все же? Ведь всем известно, что нельзя доверять данным введенным пользователем. Почему я должен доверять данным базы данных которые не подписаны моей подписью, которые не проверены мной? Где увереноость (доказательство) того, что этим данным можно доверять как самому себе?
 

antonio

Moderator
Команда форума
Ты только что сказал, что ты сам себе не доверяешь :). Может себе все-таки доверять? Так и до шизы недалеко :)
 
Сверху