Ребят, пишу скрипт удаления комментарий.. Имею вот такой обработчик на кнопке.. onclick="del_com('5', '33'); return false;" где 5 - id комментария, 33 - id пользователя
Подскажите, сможет ли кто-то изменить переменные обработчика (5,33) и выполнить скрипт?
Если да, то как? (firebug?) и как от этого обезопаситься? hash?
Заранее спасибо..
Могут - при помощи обычной консоли разработчика (той, в которой вы отлаживаете свои коды). Защититься от этого можно при помощи проверок на серверной части.
Гм.. если это для удаления только своих комментариев пользователем, то на серверной стороне проверять пользователя что прислал запрос на удаления комментария, если коммент ему принадлежить, то удалять, если нет, возвращаем ошибку. Чего сложного то?
И что даст хеш известно как сгенерированный, на известной на стороне JS информации... Две строчки кода и вся база коментов уходит в нибытиё, если на сервере нет проверки.
up_sweep , PretorDH: хеш генерируется на стороне сервера, перед тем как отправить ответ пользователю, и сгенерированный хеш вставляется в строку onclick="del_com('$commentID', '$userID', '$hashCode'); return false;" для каждой ссылки/кнопки. В html получается вид onclick="del_com('5', '33', 'dasfaF*&6ad8f76^Fs'); return false;". Далее при нажатии на кнопку, сервер получает идентификаторы и хеш. Беря за основу принятые ID генерирует хеш заново и сверяет с хешом который был прибыл вместе с идентификаторами.
Вы предлагаете на стороне сервера к каждому коментарию генерировать хеш, запоминать их по 10-20 штук на страницу. Потом из броузера посылать в запросе на сервер. На сервере искать и сравнивать хеш. А при закрытии страницы нужно искать и удалять эти хеши, или периодически их очищать хранилище.
Наверное проще аутентифицировать пользователя по сессии (кстати индентификатор - хеш) и проверить его права на удаление комента.
Конечно все проще, хеш генерируется с известной на сервере солью(скорее всего IP/ID сесии, чтобы не запоминать), из ID команды и ID пользователя.
Но, отправка ID пользователя безсмысленна как и отправка хеша. Потому, что: ID пользователя на стороне сервера уже привязано к сессии. А хеш для сервера, это вообще производное от команды которая пришла и ID пользователя. Фактически вы сравниваете хешКоманду с хешКомандой.