Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   слегка хакерский вопрос (https://javascript.ru/forum/misc/15116-slegka-khakerskijj-vopros.html)

x-yuri 14.02.2011 20:39

Цитата:

Сообщение от e1f
давайте будем сами делать то, что уже реализовано в db-интерфейсах. мы же умные, черт побери

неправильное какое-то определение. В db-интерфейсах реализовано и экринирование, и binding. Скорее "давайте ограничим пользователя в том, куда и что можно вставлять, в надежде, что он на этом и остановится"

Цитата:

Сообщение от dmitriymar
но этот вариант по ресам займёт больше чем изначальная замена их спец символами.

это еще надо доказать

Цитата:

Сообщение от dmitriymar
любое искажение данных-кавычка не в том месте где была изначально или изменение их колва -приравнивается к потере данных...

mysql_real_escape_string ничего не искажает

Цитата:

Сообщение от dmitriymar
по моему у него в видеокурсе я встречал пример где одно экранирование не спасало
jolly-wind.ru

у кого? Да и мало ли почему jolly-wind.ru могло не спасать одно экранирование

e1f 14.02.2011 20:56

Цитата:

Сообщение от x-yuri (Сообщение 92482)
неправильное какое-то определение. В db-интерфейсах реализовано и экринирование, и binding. Скорее "давайте ограничим пользователя в том, куда и что можно вставлять, в надежде, что он на этом и остановится"

Экранирование реализовано средствами самого php, так? Мы экранируем данные, запихиваем их в запрос, отдаем библиотеке для работы с БД. В то время как
prepared statements - фича базы данных.

dmitriymar 14.02.2011 20:57

Цитата:

Сообщение от x-yuri
любое искажение данных-кавычка не в том месте где была изначально или изменение их колва -приравнивается к потере данных...
mysql_real_escape_string ничего не искажает

в этиом варианте может исказить-поскольку применяются все символы и экранирование невозможно будет отличить от реально введённых пользователем данных
Цитата:

Сообщение от x-yuri
у кого? Да и мало ли почему jolly-wind.ru могло не спасать одно экранирование

ну вот пришли к тому что экранирование одно может не помочь ограничить инъекции. а ограничить тип данных я не могу- в силу специфики данных

x-yuri 14.02.2011 21:56

Цитата:

Сообщение от e1f
Экранирование реализовано средствами самого php, так?

ты ошибаешься. Ты, наверное, имел в виду get_magic_quotes_gpc() и addslashes/stripslashes

Цитата:

Сообщение от dmitriymar
в этиом варианте может исказить-поскольку применяются все символы и экранирование невозможно будет отличить от реально введённых пользователем данных

и тем не менее ему как-то удается
<?
mysql_connect('localhost', <login>, <passwd>) or die(mysql_error());
mysql_query('SET NAMES cp1251') or die(mysql_error());
mysql_select_db(<db>) or die(mysql_error());
mysql_query('DROP TABLE IF EXISTS t1') or die(mysql_error());
mysql_query('CREATE TABLE t1 (f1 TEXT CHARACTER SET cp1251)') or die(mysql_error());
$s = '';
for( $i=0; $i<256; $i++ )
    $s .= chr($i);
$_s = mysql_real_escape_string($s);
mysql_query("INSERT INTO t1 VALUES ('$_s')") or die(mysql_error());
$r = mysql_query('SELECT * FROM t1') or die(mysql_error());
$r = mysql_result($r, 0, 0);
if( $s != $r )
    die('mysql_real_escape_string sucks!!!');

x-yuri 14.02.2011 22:38

и по поводу этого:

Цитата:

Сообщение от dmitriymar
ну вот пришли к тому что экранирование одно может не помочь ограничить инъекции. а ограничить тип данных я не могу- в силу специфики данных

я не умею решать несуществующие проблемы. Если у них что-то не получилось, надо разобраться, что именно и почему. А не сразу делать вывод, что экранирование не работает

dmitriymar 14.02.2011 23:05

приведённый пример-это общий случай. в частном не пройдёт-вероятность возникновения частного минимальна конечно но всёже.
и всё равно эта полемика интересна-но меня интересует всего один вопрос(точнее группа вопросов)-заданный в начале этого топика
1 возможно ли слепить строку из строк с разными кодировками?-на клиенте
2 возможно ли сменить тип кодировки во время прередачи данных,или всёт аки передастся в той кодировке что указанна в странице?(одно упоминание я нашел что при гет и посте данные передаются в юникоде)-на клиенте
3. если всётаки можно изменить кодировку-можно ли скрипту рнр дать инструкции в этой строке указывающие на тип кодировки?
P.S никто не говорил что оно не работает-было сказано что оно не помагает в некоторых случаях инъекций.и то что в некоторых ситуациях оно может изменить исходную строку-что не желательно

x-yuri 14.02.2011 23:35

Цитата:

Сообщение от dmitriymar
было сказано что оно не помагает в некоторых случаях инъекций

в каких?

Цитата:

Сообщение от dmitriymar
и то что в некоторых ситуациях оно может изменить исходную строку

в каких?

Цитата:

Сообщение от dmitriymar
но меня интересует всего один вопрос(точнее группа вопросов)

повторюсь, я не умею решать проблему, не видя в чем она состоит. Но ты можешь подождать, пока кто-то другой ответит на твои вопросы

dmitriymar 14.02.2011 23:39

x-yuri,
дак я проблему не создавал и обход этой проблемы я знаю, но-меня интересовали ответы на эти вопросы и всё.-чтобы определиться по какому варианту реализовывать -по классическому с экранированием,проверкой на некоторые символы,вылавливанием "частного случая",приведением типа- либо с этим-где мне нужно только сделать замену.
а тему развили участники этой темы)
но насколько я понимаю -эти вопросы настолько специфические ,что навряд ли гдето массово обсуждались или поднимались.

e1f 15.02.2011 13:58

Цитата:

Сообщение от x-yuri (Сообщение 92492)
ты ошибаешься. Ты, наверное, имел в виду get_magic_quotes_gpc() и addslashes/stripslashes

Да, это и имел в виду. Просто мне метод prepare-bind-execute кажется более правильным, нежели do.

x-yuri 15.02.2011 21:31

Цитата:

Сообщение от e1f
Да, это и имел в виду. Просто мне метод prepare-bind-execute кажется более правильным, нежели do.

правильность - это не аргумент


Часовой пояс GMT +3, время: 07:23.