superpupervest
Newbie-
Posts
4 -
Joined
-
Last visited
Information
-
Sex
мужской
superpupervest's Achievements
Explorer (1/14)
0
Reputation
-
Я не занимаюсь технической поддержкой сайтов, но так уж сложилось, что ко мне часто обращаются за помощью. С одной стороны отказывать неудобно, да и не выгодно с коммерческой точки зрения, с другой за большое спасибо в магазине тоже не расплатишься. Поэтому я решил написать универсальное решение, но столкнулся с некоторыми проблемами. Суть решения заключается в том, чтобы отловить данные POST, GET, COOKIE и обработать их еще до того, как сайт произведет с ними какие-либо действия. Вот собственно сам код $jsxss="onabort,oncanplay,oncanplaythrough,ondurationchange,onemptied,onended,onerror,onloadeddata,onloadedmetadata,onloadstart,onpause,onplay,onplaying,onprogress,onratechange,onseeked,onseeking,onstalled,onsuspend,ontimeupdate,onvolumechange,onwaiting,oncopy,oncut,onpaste,ondrag,ondragend,ondragenter,ondragleave,ondragover,ondragstart,ondrop,onblur,onfocus,onfocusin,onfocusout,onchange,oninput,oninvalid,onreset,onsearch,onselect,onsubmit,onabort,onbeforeunload,onerror,onhashchange,onload,onpageshow,onpagehide,onresize,onscroll,onunload,onkeydown,onkeypress,onkeyup,altKey,ctrlKey,shiftKey,metaKey,key,keyCode,which,charCode,location,onclick,ondblclick,oncontextmenu,onmouseover,onmouseenter,onmouseout,onmouseleave,onmouseup,onmousemove,onwheel,altKey,ctrlKey,shiftKey,metaKey,button,buttons,which,clientX,clientY,detail,relatedTarget,screenX,screenY,deltaX,deltaY,deltaZ,deltaMode,animationstart,animationend,animationiteration,animationName,elapsedTime,propertyName,elapsedTime,transitionend,onerror,onmessage,onopen,ononline,onoffline,onstorage,onshow,ontoggle,onpopstate,ontouchstart,ontouchmove,ontouchend,ontouchcancel,persisted,javascript"; $jsxss = explode(",",$jsxss); foreach($_POST as $k=>$v) { if(is_array($v)) { foreach($v as $Kk=>$Vv) { $Vv = preg_replace ( "'<script[^>]*?>.*?</script>'si", "", $Vv ); $Vv = str_replace($jsxss,"",$Vv); $Vv = str_replace (array("*","\\"), "", $Vv ); $Vv = strip_tags($Vv); $Vv = htmlentities($Vv, ENT_QUOTES, "UTF-8"); $Vv = htmlspecialchars($Vv, ENT_QUOTES); $_POST[$k][$Kk] = $Vv; } } ELSE { //Сначала удаляем любые скрипты для защиты от xss-атак $v = preg_replace ( "'<script[^>]*?>.*?</script>'si", "", $v ); //Вырезаем все известные javascript события для защиты от xss-атак $v = str_replace($jsxss,"",$v); //Удаляем экранированание для защиты от SQL-иньекций $v = str_replace (array("*","\\"), "", $v ); //Экранируем специальные символы в строках для использования в выражениях SQL $v = mysql_real_escape_string( $v ); //Удаляем другие лишние теги. $v = strip_tags($v); //Преобразуеv все возможные символы в соответствующие HTML-сущности $v = htmlentities($v, ENT_QUOTES, "UTF-8"); $v = htmlspecialchars($v, ENT_QUOTES); //Перезаписываем GET массив $_POST[$k] = $v; } }[/CODE] Тоже самое я сделал по аналогии с _GET и _COOKIE Основные недостатки. 1) У меня так и не вышло обработать, а точнее перезаписать их внутри функции и передать _POST, _GET и _COOKIE в качестве переменных, а главное, как следствие, обработать многомерные массивы данных рекурсивно. Соответственно $_POST[][], $_POST[][][] и тд уже обработать не выйдет и каждый такой массив надо вставлять отдельно. Массив может быть бесконечно большой, а код получится бесконечно громозкий. 2) Не охота убирать функцию mysql_real_escape_string ведь никогда не знаешь, где ее забыли упомянуть, но возникает проблема излишнего экранирования символов. 3) strip_tags удаляет все теги. Мне бы не хотелось убирать все, а лишь самые опасные теги, но беда в том, что в дополнительных параметрах можно указать только теги, которые нужно оставить. Конечно, можно использовать регулярные выражения, но к сожалению, нет уверенности в том, что не забудешь что-нибудь важное, поэтому если у кого-то есть отличная замена этому, то предлагаю собрать все в кучу и избавиться от strip_tags 4) Ну и жду других советов по данному вопросу.
-
Блокировка за спам при расслылке уведомлений в каталоге.
superpupervest replied to superpupervest's question in PHP
Подскажите, а как бы мне теперь проверить почту на работоспособность. Получается, что сейчас я отправляю сообщения себе на yandex, gmail и mail.ru. Туда сообщения доходят. Но ведь много еще и других ящиков. Можно как-то отправить с сервера запрос и получить ответ. Типа почтовый ящик не работает, или в спам попал. И на php его обработать уже и куда-нибудь занести скажем в базу. И потом бы я уже мог посмотреть все недоставленные письма и проанализировать, что как и почему. Буду крайне признателен. -
Блокировка за спам при расслылке уведомлений в каталоге.
superpupervest replied to superpupervest's question in PHP
В общем ребят, попробовал я еще несколько хостеров. Надо сказать ситуация аналогичная. Пробовал настроить почтовый ящик со своим доменом у них, но надо признать техподдержка у них оставляет желать лучшего. Остановился на http://wazzup.su, там и почта не блокируется на KVM тарифах, и техподдерка быстро реагируется и помогает решать любые проблемы. Единственное, что в первые дни долбанул где-то по 30 тысяч писем в сутки и на третий день заметил, что письма мои не доходят до крупных почтовиков, включая mail.ru, yandex, gmail и rambler. Доходит только на почтовые ящики, которые на своих доменах сделаные, типа mysait.ru, да и то не до всех. Что в общем-то тоже оказалось не вариант, так как большинство получателей пользователи именно этих почтовых сервисов. Как оказалось блокировка идет за спам по IP и содержанию письма. Но слава богу ребята помогли настроить отправку через smpt c помощью утилиты msmtprc, которую спасибо хостерам тоже помогли установить и настроить. По статистике mail.ru разрешает отправлять не больше 1 письма в минуту и блокирует только в путь. Яндекс не больше 150 писем в сутки. Так что пришлось зарегистрировать несколько почтовых ящиков на gmail, он оказался самым лояльным и отправка там не менее 500 писем в сутки. В принципе я зарегистрировал 10 почтовых ящиков на gmail и перебираю их по порядку. Так что уходит где-то по 3-5 тысяч писем в сутки. Слава богу у разработчика каталога есть платный модуль, который позволяте делать настраиваемую рассылку. Ну и побольше всяких тегов использовал в шаблонах, чтобы текст был более динамическим и сам текст сократил. Отправку писем через регистрацию правда пришлось отключить, а оповещение я уже сделал через модуль рассылки. Хотел еще заказать спам рассылку, но у меня оказалось из 2 миллионов предприятий более 700 тысяч с почтой. А самая дешевая рассылка, которую я нашел 1$ за 1000 сообщений. Это чтобы все 700 отослать мне надо не меньше 700$. Я столько и не зарабатываю. А если учесть еще, что мне ее нужно будет делать периодически, то так и вовсе разориться можно. Пробовал еще несколько платных smpt-серверов, котоыре вроде как не блокируют. Но от блока по IP они тоже не защищают и техподдержка там никакая, а стоит в разы дороже. Но в общем-то пока так. Если кто-то знает сервер, где таких проблем не происходит, то будьте добры пожалуйста. Или хотя бы как сделать так чтобы IP не попадали в спам-базы яндекса, gmail, mail.ru и ramblera. -
Купил скрипт каталога организаций и фирм, залил более 2 млн предприятий. Во время активации каждой организации уходило уведомление. В итоге хостер весь сайт за спам вырубил. Пошел к другому. Тот и вовсе отключил весь аккаунт. Где можно найти нормального хостера, который не блочит за рассылку? Или может есть какие-то другие обходные пути? К слову рассылка еще и к тому же попадает в спам, даже когда доходит. Это тоже не желательно. В общем жду любого дельного совета по данному вопросу.