Ычан: [d | b / bro / hr / l / m / mi / mu / o / ph / r / s / sci / tran / tu / tv / x | es / vg | au / tr | a / aa / c / fi / jp / rm / tan / to / vn / vo]
[Назад]
Ответ в нить
Имя
Animapcha image [@] [?]
Тема   ( ответ в 24993)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, MP4, OGG, OGV, PDF, PNG, PSD, RAR, SVG, SWF, TXT, WEBM, WEBP, XCF, ZIP размером до 5000 кБ.
  • Ныне 3528 unique user posts. Посмотреть каталог
  • Максимальное количество бампов нити: 500
Screenshot_20201030_113945.png - (516.36KB, 2032×1172)
24993
No. 24993    
Разрабатываю движок АИБ, сайт: https://symfony2ch.ru
короткий вариант домена: https://s2ch.ru
скрипт может в любой момент выдавать ошибки, сервер падать, могу принимать реквесты по улучшению функционала.
Развернуть все изображения
No. 24996    
Бро, пойми, что ты вызываешь только агрессию. С таким отношением мне не хочется тебе помогать. Мне хочется зайти к тебе на твою недоборду и завайпать её к херам. Ты ж её даже рекламировал здесь, только в б.
No. 24997    
>>24996
Мне не нужна помощь.
>Мне хочется зайти к тебе на твою недоборду и завайпать её к херам.
Так именно подобное от тебя и требуется, тестировать и ломать скрипт.
У меня сейчас нету кэширования, хотя нужно для производительности, если положишь, тогда запилю и кэширование. Я расстанавливаю приоритеты.
No. 24998    
>>24996
могу рекапчю запилить, если сломаешь от Gregwar. https://github.com/Gregwar/Image
No. 25007    
я при разработке своего проекта встретился с этой фичей php:
https://bugs.php.net/bug.php?id=29992
Description:
------------
foreach with a reference seems to corrupt the last element in an array

Reproduce code:
---------------
<?php
$array = array(1,2,3);
foreach( $array as &$item ) { }
print_r( $array );
foreach( $array as $item ) { }
print_r( $array );
?>

Expected result:
----------------
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[0] => 1
[1] => 2
[2] => 3
)

Actual result:
--------------
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[0] => 1
[1] => 2
[2] => 2
)
...

Не буду рассказывать подробности, но мне пришлось поставить @ перед md5_file и getimagesize, у меня последний файл при загрузке нескольких всегда был ссылкой на предыдущий, сейчас понял, в чём там дело, исправил, историю рассказывать не буду.
No. 25026    
Читаю про вайп на ычане:
>А если ойпи динамический? Может, по паролю к сообщениям как-то сделать? По ним ведь банят, значит и инвайт можно выписать, наверное.
Так угораю с этих систем защиты, для дураков сделано. Вот пишут свои системы защиты, дураки уйдут, умные останутся... На 2ch.hk в cookie пишут какую-то информацию при бане. Понимаете, будучи программистом составлять системы защиты от дурачков гиблое дело, они всегда обмануть могут, а систему защиты всегда улучшать надо будет. Там же основной смысл состоит в обмане, вот давай по паролю к сообщениям банить, а давайте по user_id в cookie, а давайте, давайте... всё это обман, которые легко определить, какой смысл составлять такой код, постоянно улучшать надо будет. Делом заняться не могут, всё защиту от дурачков создают, код програмнный этот не имеет смысла, когда узнаёшь о механизме, тогда защиты и нету, а значит и не было, оно там на обмане основане, вот тебе пароль к сообщению, никто не узнает, а теперь по нему банят. И кто на это попадётся? Тот, кто один и тот же использует. Вот у меня всё просто, user_id нужны для ограничений постинга тех же картинок, если кто-то буйствует, могу удалить аккаунт, а значит придётся заново набивать сообщения или таки без картинок постить. Я накладываю ограничения, которые защищают от вайпа, они не от дурачков защищают, не могут с вайпать справить на ычане, регистрацию вводят по паролям к сообщениям, вот и пусть их вайпают, мою борду невозможно завайпать. Анонимус? Тогда жди премодерации нового треда... Исходя из этой системы можно много разных ограничений накладывать или снимать, определяется с опытом. IP - способ идентификации пользователя, а значит нельзя позволить использовать прокси и тор... такое лучше, чем регистрация.
No. 25027    
Я надеюсь вы поняли иронию про идентификацию по IP, АИБ становятся наименее анонимными форумами, там от тебя с реального IP просят постить и так идентифицировать... Вот твой IP - аккаунт, менять не имеешь права, иначе ты плохой человек, добрые они всегда со своего реального постят.
No. 25053    
Админка сейчас так выглядит.
No. 25054    
Буду загружать по одному файлу...
No. 25055    
Есть ещё страница выполнения SQL запросов и восстановления из резервной копии, но не буду постить, всё и так понятно.
No. 25056    
>>25054
С премодерацией вам, пожалуйста, на Доброчан. Принципиально не посещаю борды, где есть такая гнусная вещь.

>>25053
>Таблицы базы данных
>Существует.
Неужели ты используешь Симфони без Доктрины и ее миграций? Что за низкоуровневые запросы к БД? Твой движок вообще не должен знать ни о каких таблицах.
No. 25057    
>>25056
Премодерация лучше, чем баны по IP. К тому же у меня нету времени проверять каждый пост на борде... Вот недавно организовал ограничение на количество постов с одного IP в минуту и десять минут, мне тех, кто постят слишком много банить автоматически или на премодерацию отправлять? Премодерация лучший вариант, пост анонимуса не удаляется, а проверяется в случае чрезмерной активности.
>Неужели ты используешь Симфони без Доктрины и ее миграций? Что за низкоуровневые запросы к БД? Твой движок вообще не должен знать ни о каких таблицах.
Если честно, у меня какие-то проблемы с миграцией, хотя мне это неинтересно, оно тупо ничего не делает... Да и вообще, я использую таки модели для генерации таблиц. Страница где проверяются таблицы на существование является установочной, приложение сразу же запускается после загрузки на сервер, достаточно в файле .env указать параметры для соединения с БД.

public function createEntityTables() {

        $metadatas = $this->allMetadata();
        $tables = array();
        foreach($metadatas as $metadata) {
            try {
                $tables[$metadata->table['name']]['name'] = $metadata->table['name'];
                if($this->tableExist($metadata->table['name'])) {
                    $tables[$metadata->table['name']]['exist'] = true;
                } else {
                    $this->tool()->createSchema(array($metadata));
                    $tables[$metadata->table['name']]['create'] = true;
                }
            } catch (\Doctrine\ORM\Tools\ToolsException $exc) {
                $tables[$metadata->table['name']]['error'] = $exc;
                $tables[$metadata->table['name']]['create'] = false;
            }
        }
        return $tables;
    }

https://pastebin.com/SeqPRADB
No. 25062    
>>25056
А, ну, понятно, почему у меня там с миграцией проблемы, таблицы же с динамическим названием присутствуют. Я же АИБ создаю, значит есть таблицы типа board_section_b и т.п., впрочем, используются они чисто для генерации уникальных ID. Однако, технически можно туда добавлять поля, тогда для каждого из разделов можно cоздать своё уникальное поле в БД.
No. 25065    
Теперь у меня есть страница с описанием API: https://symfony2ch.ru/api.html

Информация о Symfony /info/about.html

Все доступные пути /info/router.html
Содержимое файла composer.json /info/composer.html
Содержимое файла config/bundles.php /info/bundles.html
Страница "о себе" /user/info.json
Разлогиниться /user/logout.json
Выдаёт ID треда по названию раздела и идентификатору в нём сообщения /redirect/{название_раздела}/{идентификатор_сообщения_внутри_раздела}.json
Последний уникальный ID сообщения /all/last_post_id.json
Последний ID сообщения в разделе /{название_раздела}/last_post_id.json
Последний ID сообщения в треде /{название_раздела}/last_post_id/{идентификатор_треда}.json
Номера сообщений, которые следуют после уникального ID /all/posts_id_after_{идентификатор_сообщения}.json
Номера сообщений, которые следуют после ID внутри раздела /{название_раздела}/posts_id_after_{идентификатор_сообщения_внутри_раздела}.json
Номера сообщений, которые следуют после ID внутри треда /{название_раздела}/posts_id_after_{идентификатор_сообщения_внутри_раздела}/{идентификатор_треда}.json
Каталог тредов /catalog/all/{номер_страницы}.json
Каталог тредов внутри раздела /catalog/{название_раздела}/{номер_страницы}.json
Страница с тредами и последними пятью к ним сообщениям /all/{номер_страницы}.json
Страница с тредами и последними пятью к ним сообщениям внутри раздела /{название_раздела}/{номер_страницы}.json
Тред /{название_раздела}/res/{идентификатор_треда}.json
Все сообщения /all/posts/{номер_страницы}.json
Все сообщения внутри раздела /{название_раздела}/posts/{номер_страницы}.json
Сообщение по уникальному ID /all/post/{идентификатор_сообщения}.{_format}
Сообщение по ID внутри раздела /{название_раздела}/post/{идентификатор_сообщения_внутри_раздела}.json
Вы так же можете запросить любую HTML с содержимым без всякой лишней информации, для этого достаточно добавить в параметре GET значение onlycontent=1, пример: /api.html?onlycontent=1.

No. 25089    
logapache.png - (410.20KB, 1491×664)
25089
Тут кто-нибудь разбирается в серверном администратировании? Какая-то DDOS-атака происходит? Попытался сейчас сменить apache2 на nginx, не уверен, что в скриптах дело.
Лог apache2 был заполнен тем, что ан скрине.
CPU использовался на 100%, ещё вот это:
>[Sat Jan 09 10:57:49.883325 2021] [php7:error] [pid 7704] [client ...] PHP Fatal error: Out of memory (allocated 2097152) (tried to allocate 4096 bytes)
No. 25090    
Даже сам свой сервер тестом от apache2 смог положить... пришлось настраивать nginx.
Сейчас у меня такое:
/etc/nginx/nginx.conf
http {
...
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_req_zone $binary_remote_addr zone=dynamic:10m rate=1r/s;
...

/etc/nginx/sites-available/default
server {
...
limit_conn perip 10;
...
location ~ ^/index\.php(/|$) {
...
limit_req zone=dynamic burst=2 nodelay;
...
}
...
No. 25091    
оно помогает, но всё равное такое себе... тут может брандмауер нужно настраивать или cloudflare попробовать бесплатный.
No. 25092    
Перевёл на бесплатный cloudflare, всё равно неизвестно сколько бы потратил времени на настройки сервера... Мне теперь IP пользователей нужно через заголовок HTTP_X_FORWARDED_FOR брать.
No. 25093    
>>25092
>Перевёл на бесплатный cloudflare
Кокой глупый у тебя дудосер. Настоящий айпи-то все равно известен (был), так что ничто не мешает дудосить в обход.
No. 25094    
>>25093
да уже сменил IP. теперь разбираюсь какие там новые трюки, вроде просто обновление капчи запрашивает очень быстро, тут теперь не nginx виснет, а уже однозначно php-fpm. ладно, зачем обсуждать? разбираться надо.
No. 25097    
cloudflare.com вообще ни о чём, легко обошёл DoS-ер. отключился от данной услуги, попытался настроить сервер и оно тест apache2 выдерживает:
ab -c 50 -n 30000 ru2ch.com/

### ANTIDDOS ###
limit_conn_zone $binary_remote_addr zone=perip:10m;
#limit_req_zone $binary_remote_addr zone=dynamic:10m rate=2r/s;
limit_req_zone $binary_remote_addr zone=dynamic:10m rate=1r/s;
################

### ANTIDDOS ###
##limit_conn perip 50;
limit_conn perip 5;
################

### ANTIDDOS ###
## limit_req zone=dynamic burst=5 nodelay;
limit_req zone=dynamic burst=1 nodelay;
################
No. 25098    
не, оно не помогает, нужно таки разбираться в этих настройках сервера. теперь у меня грузит сам nginx от теста.
No. 25100    
Через fail2ban количество запросов контролирую. https://itstuff.info/linux_unix/configuretion-fail2ban-and-nginx-to-protect-from-dos/
No. 25101    
Не знаю зачем это всё рассказываю... мои дальнейшие планы.
Делая простую DDOS-защиту понял некоторые вещи, так вот, собираюсь таки кэшировать html страницы полностью, а не отдельно запросы из базы данных, да и вообще кэшировать все возможные алгоритмы, чтобы снизить нагрузку на процессор. К тому же, собираюсь уменьшить количество запрашиваемых скриптов, потому что это поможет защититься от DDOS'а, вот сейчас у меня каждое новое сообщение в треде скачивается, а значит, если их 10, тогда будет 10 запросов, мне нужно сделать так, чтобы обычный пользователь кардинально отличался от DDOS'ера, который запрашивает много страниц за один раз.
Всё это сейчас не так важно, потому что нагрузки нету и пользователей, некуда торопиться, отдыхаю.
No. 25107    
>>25101
Планы рассказывают для ответственности, например. Дальше не читал.
No. 25112    
>>25107
Нет, дело в том, что TODO можно составить где-нибудь в текстовом документе, а можно на форуме в интернете.
No. 25122    
>>25007
Эта фича лечится unset($item); после foreach( $array as &$item ) {}.

Но если тебе приходится изменять элементы массива в foreach, то твой код дурно пахнет.
Удалить сообщение []
Пароль  
[Mod]