Забыли пароль?
Запросите новый здесь.

Автор темы: IPB_Support
ID темы: 907
Информация:
Тема содержит 40 сообщения, была просмотрена 8443 раз.
Просмотр темы
PHP-Fusion Russia » Поддержка 7 версии » Ошибки, баги
 Распечатать тему
Непойму что за ошибка
dark
Согласен полностью с PolarFox. Если уж есть способ хотелось бы на него взглянуть, дабы знать как организовать защиту.
 
IPB_Support
Вы подумайте, какой резон вам объяснять обход? Как говориться хочешь защиту плати!
Я знаю что сейчас начнется дискуссия по поводу того что здесь помогают за спасибо, и почему бы не брать за это деньги...
 
Rush
мне одному кажется, или rasmusok несет бред. в первый раз слышу подобное. единственный и самый весомый минус rand() - при большом количестве строк - серьезный удар по производительности. проще заполнить в пхп массив случайных ключей и по нему сделать выборку.
x2
 
Web
Polarfox
IPB_Support, кажется ты не понимаешь о чем говоришь, но это нормально если ты не специалист.

Rush yep, проблема в том что удаленные ряды, а без них это и правда было бы лучшее решение...
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
 
Rush
ну это тоже не проблема. заполняешь на 20 ключей и ставишь лимит запроса на 10
 
Web
Polarfox
а из 20 если 20 пустые? по факту такое вполне быть может, а нужно 100% вывод, снова не решение.
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
 
Rasmusok
Скажите мне на милость вы вообще сдесь оболдели или тут сайт хакерской тематики, вы че х... плетете, на что посмотреть!? Как сломать сайт! Ща епт, распишу по детально и пережую за вас, чтоб мне потом пришили че нить или полбу надовали что я учу хе..м вещам.

Я в шоке над вашими сообщениями порой! am
Разработка сайтов. Продвижение. Раскрутка. www.wooas.ru
Начхать на красоту, главное что под капотом.
 
Web
jikaka
Rasmusok, что ты на пустом месте бесишься? детский сад, с пол оборота заводишься, как маленький
 
Web
Rasmusok
Да не Кость это надо такой дибилизм спрашивать! Тут за копирайт что не поставил "крысой" чуть ли не обзывают, а им еще код подай чтоб посмотреть как ломать сайты. спасибо, был тут один год назад, ломанул я ему сайт так меня потом морально заманали, мне 2-го раза не надо! Тут по мимо меня блатных кодеров навалом, сами напишут и если надо сломают.

И больше не просите подобный дибилизм, каждый отвечает за себя. Кому надо, тот сломает, кому надо готовенькое ОБРЫБИТЕСЬ!
Разработка сайтов. Продвижение. Раскрутка. www.wooas.ru
Начхать на красоту, главное что под капотом.
 
Web
Rush
да просто думать надо что говоришь, раз ляпнул, так отвечай за слова. тут не так много интересуется людей, можно и в личку. интересно лишь с профессиональной точки зрения, как order by rand() может помочь взломать сайт. это бред какой то
x2
 
Web
Vova
Странно. Даже без меня всё соряться.

Загрузить источник  GeSHi: PHP
  1. $result= dbquery("SELECT MIN(`article_id`) AS `min`, MAX(`article_id`) AS `max` FROM ".DB_ARTICLES."");
  2. while ($row = dbarray($result)) {
  3. $min_id=$row['min'];
  4. $max_id=$row['max'];
  5. }
  6. $id=rand($min_id,$max_id);
  7. $result = dbquery("SELECT * FROM ".DB_ARTICLES." WHERE article_id>'".$id."' LIMIT 10");
Добавлено за 0.028 секунд, используя GeSHi 1.0.8.10


Пол милиона записей от 0.05-0.10 секунды идет виборка рандомных записей.

Но есть и минус в такой виборке. Нужно что бы было меньше пропущених статей.

ORDER BY RAND() - если много записей, долго виполняеться.
 
Web
Rasmusok
Мда друзья, если order by rand() для некоторых бред со вломом сайта, то я в улете че тут вообще говорить о ПРОФ.точки зрения. И если и ляпаю, значит на практике а не по слухам, и отвечать я тут не перед кем не должен...

Один тоже на эту тему блатовал у вас тут как я и говорил год назад, я доказал такому как ты как, что фьюжин ломается за 5 мин и не раз, свидетель тому как Костян так и PolarFox если они помнят.

Поставьте хоть весь сайт на рандом, мне чхать! Потом не плачь когда будет онлайн сайта от 100-ки в день, я погляжу на твой сервак и сайт потом. А если и кому доведется заметить суть которую тут толкают тогда и покажет и докажет.

Я умываю с этого дибилизма руки. Я проблему пацану решил, на остальной базар тупорылый нет времени.

Ты б еще на общее куда нето людям вынеc что order by rand() не способствует взлому. ag

P/S: Профессиональная точка зрения! bj
Разработка сайтов. Продвижение. Раскрутка. www.wooas.ru
Начхать на красоту, главное что под капотом.
 
Web
Rush
ты по делу скажи что нибудь, один пафос в тексте
 
Web
Polarfox
Помню что был похожий выпад, много пафоса, пиара и мало что по итогам, щас копия того же.

Я раскрываю уязвимости и сдаю их [только] авторам, никакого шума, (меньше будет школьников кулхацкеров, это не про вас ребята а про вполне себе школьников), но почему ты не хочешь это сделать приватно или публично, мне совсем не ясно.

Vova, хороший сервер многое может решить, но что если в ином случае нагрузка упадет в 10-100 раз и выборка будет идти 0.001 с? Это стоит того?
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
 
Vova
Vova, хороший сервер многое может решить, но что если в ином случае нагрузка упадет в 10-100 раз и выборка будет идти 0.001 с? Это стоит того?


Не знаю. Мне оно помогло.
 
Web
Polarfox
Да я вообще говорил про некое решение без доп запросов, вот у тебя та же проблема, что если пункта не будет?

Ну положим ты не удаляешь, но я просто говорю что решение не очень удачное.
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
 
Vova
Определяем общее кол-во:
Загрузить источник  GeSHi: PHP
  1. SELECT COUNT(*) FROM table_name
Добавлено за 0.017 секунд, используя GeSHi 1.0.8.10


Через PHP генерим пять случайных позиций в этом кол-ве:
Загрузить источник  GeSHi: PHP
  1. $pos = array(
  2. rand(0, $count),
  3. rand(0, $count),
  4. rand(0, $count),
  5. rand(0, $count),
  6. rand(0, $count),
  7. );
  8.  
Добавлено за 0.018 секунд, используя GeSHi 1.0.8.10

И выполняем запрос:
Загрузить источник  GeSHi: PHP
  1. $sql =
  2. // Здесь определяются ID соответствующие случайным позициям
  3. 'SELECT id FROM table_name LIMIT 1 OFFSET ' . $pos[0] . ' INTO @id1;' .
  4. 'SELECT id FROM table_name LIMIT 1 OFFSET ' . $pos[1] . ' INTO @id2;' .
  5. 'SELECT id FROM table_name LIMIT 1 OFFSET ' . $pos[2] . ' INTO @id3;' .
  6. 'SELECT id FROM table_name LIMIT 1 OFFSET ' . $pos[3] . ' INTO @id4;' .
  7. 'SELECT id FROM table_name LIMIT 1 OFFSET ' . $pos[4] . ' INTO @id5;' .
  8. // А здесь уже сама выборка записей по определенными ID
  9. 'SELECT * FROM table_name WHERE id IN (@id1, @id2, @id3, @id4, @id5);';
  10.  
Добавлено за 0.021 секунд, используя GeSHi 1.0.8.10

UPD: Функция на PHP которая строит SQL-запрос выглядела бы примерно так:
Загрузить источник  GeSHi: PHP
  1. function getRandRowsSQL($table_name, $key_name, $real_count, $count)
  2. {
  3. // Проверяем кол-во на максимум
  4. if( $count > $real_count ) $count = $real_count;
  5. $sql = '';
  6. if( $count > 0 ){
  7. // Создаем массив уникальных позиций
  8. $pos = array();
  9. $pos[0] = rand(1, $real_count);
  10. $i = 1;
  11. while( $i < $count ){
  12. $pos[$i] = rand(1, $real_count);
  13. for( $j = 0; $j < $i; $j++ ){
  14. $is_unique = ($pos[$j] != $pos[$i]);
  15. if( !$is_unique ) break;
  16. }
  17. if( $is_unique ) $i++;
  18. }
  19. // Строим SQL
  20. for( $i = 0; $i < $count; $i++ ){
  21. $sql .=
  22. 'SELECT ' . $key_name . ' FROM ' . $table_name .
  23. ' LIMIT 1 OFFSET ' . $pos[$i] . ' INTO @id' . $i . ";\n";
  24. }
  25. $sql .= 'SELECT * FROM ' . $table_name . ' WHERE ' . $key_name . ' IN (@id0';
  26. for( $i = 1; $i < $count; $i++ ){
  27. $sql .= ', @id' . $i;
  28. }
  29. $sql .= ');';
  30. }
  31. return $sql;
  32. }
Добавлено за 0.023 секунд, используя GeSHi 1.0.8.10

$table_name - имя таблицы
$key_name - название поля primary_key
$real_count - общее кол-во записей в таблице (получаем через SELECT COUNT(*) FROM table_name)
$count - кол-во случайных записей которые нужно выбирать запросом
return - на выходе функции текст SQL запроса

Для примера что получится можно сделать:
Загрузить источник  GeSHi: PHP
  1. <pre><?= getRandRowsSQL('table', 'id', 1000, 5) ?></pre>
Добавлено за 0.020 секунд, используя GeSHi 1.0.8.10

 
Web
Rush
во первых коунт посчитает максимальное количество записей, это никак не связано с максимальным ид. если у тя записи с ид 1,1000,2000. у тя будет 3 записи в коунт и pos заполнится значениями от 0 (! заметь нуля вообще нету в ид и не предусмотрен auto_increment) до 3, а записи имеют совсем другие ид. оффсет конечно сработает, но запрос в любом случае слишком толстый.

так что решение далеко не универсальное, хоть и интересное
 
Web
Rush
во втором куске кода в $pos не исключены повторяющиеся записи.
да и вообще, что это за бред?
Скачать исходники  Код
while( $i < $count ){
            $pos[$i] = rand(1, $real_count);
            for( $j = 0; $j < $i; $j++ ){
                $is_unique = ($pos[$j] != $pos[$i]);
                if( !$is_unique ) break;
            }
            if( $is_unique ) $i++;
        }

for( $j = 0; $j < $i; $j++ ){
                $is_unique = ($pos[$j] != $pos[$i]);
                if( !$is_unique ) break;
            }????????????





не проще ли использовать in_array, зачем перебирать массив
 
Web
Vova
Загрузить источник  GeSHi: PHP
  1. function getRandRowsSQL($table_name, $key_name, $real_count, $count)
  2.  
  3. {
  4.  
  5. // Проверяем кол-во на максимум
  6.  
  7. if( $count > $real_count ) $count = $real_count;
  8.  
  9. $sql = '';
  10.  
  11. if( $count > 0 ){
  12.  
  13. // Создаем массив уникальных позиций
  14.  
  15. $pos = array();
  16.  
  17. $pos[0] = rand(1, $real_count);
  18.  
  19. $i = 1;
  20.  
  21. while( $i < $count ){
  22.  
  23. $pos[$i] = rand(1, $real_count);
  24.  
  25. for( $j = 0; $j < $i; $j++ ){
  26.  
  27. $is_unique = ($pos[$j] != $pos[$i]);
  28.  
  29. if( !$is_unique ) break;
  30.  
  31. }
  32.  
  33. if( $is_unique ) $i++;
  34.  
  35. }
  36.  
  37. // Строим SQL
  38.  
  39. for( $i = 0; $i < $count; $i++ ){
  40.  
  41. $sql .=
  42.  
  43. 'SELECT ' . $key_name . ' FROM ' . $table_name .
  44.  
  45. ' LIMIT 1 OFFSET ' . $pos[$i] . ' INTO @id' . $i . ";\n";
  46.  
  47. }
  48.  
  49. $sql .= 'SELECT * FROM ' . $table_name . ' WHERE ' . $key_name . ' IN (@id0';
  50.  
  51. for( $i = 1; $i < $count; $i++ ){
  52.  
  53. $sql .= ', @id' . $i;
  54.  
  55. }
  56.  
  57. $sql .= ');';
  58.  
  59. }
  60.  
  61. return $sql;
  62.  
  63. }
Добавлено за 0.026 секунд, используя GeSHi 1.0.8.10


я хотел совсем другое сказать. Эта функция из коде игнитера.
 
Web

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум: