Владельцам 3.8.6: не поставили патч - потеряли форум!

Файловый Архив

  • Неограниченное количество категорий и суб-категорий
  • Настройки прав доступа по группам
  • Настройки прав доступа по каждой категории
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
Loading

Go Back   форум vBSupport.org > > >
Register Изображения Меню vBsupport Files Manager Аллея Звёзд Реклама на форуме Search Today's Posts Mark Forums Read
  • Мемберка
  • Администраторам
  • Premoderation
  • For English speaking users
  • Изменения в правах
  • Каталог Фрилансеров
Пароли на скачивание файлов в Member Area меняются автоматически каждый день
Если вам нужно скачать какой то скрипт, за паролем ко мне в ЛС
привет какирам kerk
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Не можете скачать вложение?
Изменения в правах групп пользователей
внимательно читаем эту и эту темы
Короткая версия - тут
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

 
 
Old  
kerk
k0t
 
kerk's Avatar
Default [Админам] Мелкие полезности 8

Нужна была функция фильтра IP клиента по:
  1. заданному диапазону IP адресов
  2. точное совпадение заданного IP с IP клиента
  3. по части IP адреса
Порылся на php.net и нашел что то подобное, но не совсем отвечающее моим требованиям =)
в вобле такого не нашел
немного допилил найденную на php.net и получилась такая функция
PHP Code:
/*
* Verified IP or NetRange with user/client IP Address
* returned values:
***** TRUE *****
* 1 - Match exact IP
* 2 - Match first 3 blocks of IP's
* 3 - IP in the NetRange
***** FALSE *****
* -1 - Invalid IP NetRange
* -2 - Invalid IP or NetRange
* -3 - Not in the NetRange
*/
function kr_verify_client_ip($ip_range$ip_address IPADDRESS)
{
      
$length 1;
      
// IP NetRange
      
if(preg_match("#(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}.*\-.*\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})#s"$ip_range$matches))
      {
            if(
$matches[1])
            {
                  
$ip_range array_map('trim'explode('-'$matches[1]));
            }
            unset(
$matches);
      }
      
// IP Address
      
else if(preg_match("#(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})#s"$ip_range$matches))
      {
            if(
$matches[1])
            {
                  
$ip_range array_map('trim', array($matches[1]));
            }
            unset(
$matches);
      }else{
            
// Invalid IP Address or IP NetRange
            
return -1;
      }
      
// Verify IP Address
      
if(preg_match("#(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})#s"$ip_address$matches))
      {
            if(
$matches[1])
            {
                  
$ip_address trim($matches[1]);
            }
            unset(
$matches);
      }else{
            
// Invalid given IP Address, use vB constant
            
$ip_address IPADDRESS;
      }

      
// IP Range invalid, use exact IP or first 3 blocks of IP to compare
      
if(count($ip_range) <> 2)
      {
            
$ip_range_part implode('.'array_slice(explode('.'$ip_range[0]), 0$length));
            
$ip_address_part implode('.'array_slice(explode('.'$ip_address), 0$length));
            
// Compare exact IP
            
if(ip2long($ip_range[0]) == ip2long($ip_address))
            {
                  return 
1;
            }
            
// Compare first 3 blocks of IP
            
else if(ip2long($ip_range_part) == ip2long($ip_address_part))
            {
                  return 
2;
            }
            
// Not match IP or not in the NetRange
            
return -2;
      }else{
            
$ip_range_start ip2long($ip_range[0]);
            
$ip_range_end ip2long($ip_range[1]);
            
$ip_long ip2long($ip_address);
            if(
$ip_long >= $ip_range_start AND $ip_long <= $ip_range_end)
            {
                  return 
3;
            }
            
// Not In the Range
            
return -3;
      }
      
// it will never happen =)
      
return 0;

Требования
внутри кода vBulletin, где доступны константы движка
или дописать в начало функции
PHP Code:
      if(!defined('IPADDRESS'))
      {
            
define('IPADDRESS'$_SERVER['REMOTE_ADDR']);
      } 
Использование
PHP Code:
$ret kr_verify_client_ip('127.0.0.1''127.0.0.1');
print 
$ret;// return value 1
$ret kr_verify_client_ip('127.0.0.0''127.0.0.1');
print 
$ret;// return value 2
$ret kr_verify_client_ip('127.0.0.0 - 127.255.255.255');
print 
$ret;// return value 3
$ret kr_verify_client_ip('127.0 - 127.255''127.0.0.1');
print 
$ret;// return value -1
$ret kr_verify_client_ip('127.0 - 127.255.255.255');
print 
$ret;// return value -2
$ret kr_verify_client_ip('127.0.0.0 - 127.255.255.255''177.254.255.255');
print 
$ret;// return value -3 
наверное будет полезно хакописателям для проверки IP или диапазона IP-шников
====
у вас есть свои наработки?
небольшие полезные функции, классы...
поделитесь?
 
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
Old  
StenLi
На доске почёта
Пожизненный блэк
 
banned nax
Default 5

Суть функции: проверка файлов антивирусником Dr.Web
Отправка файла POST запросом.

PHP Code:
# Использовать так:
# av_check('/path/file.doc', 'filename');
#
# Типы ответов:
# 'ERROR' - Ошибка отправки файлов
# 'CLEAN' - Файл не содержит вредоносный код.
# 'INFECTED' - Файл заражен.

function av_check($filePath$fileName)
{
  
define("CRLF""\r\n");
  
define("DCRLF"CRLF.CRLF);

  
$boundary "---------------------".substr(md5(rand(0,32000)),0,10);

  
$fieldsData "";

  
$fileHeaders "--".$boundary.CRLF;
  
$fileHeaders .= "Content-Disposition: form-data; name=\"file\"; filename=\"".$fileName."\"".CRLF;
  
$fileHeaders .= "Content-Type: ".mime_content_type($filePath).DCRLF;
  
$fileHeadersTail CRLF."--".$boundary."--".CRLF;

  
$filesize filesize($filePath);
  
$contentLength strlen($fieldsData) + strlen($fileHeaders) + $filesize strlen($fileHeadersTail);

  
$headers  "POST http://online.drweb.com/result/ HTTP/1.0".CRLF;
  
$headers .= "Host: online.drweb.com".CRLF;
  
$headers .= "Referer: online.drweb.com".CRLF;
  
$headers .= "Content-type: multipart/form-data, boundary=".$boundary.CRLF;
  
$headers .= "Content-length: ".$contentLength.DCRLF;
  
$headers .= $fieldsData;
  
$headers .= $fileHeaders;

  if(!
$fp fsockopen('online.drweb.com'80)) return false;
  
fputs($fp$headers);

  
$fp2 fopen($filePath"rb");

  while(!
feof($fp2)) fputs($fpfgets($fp21024*100));

  
fclose($fp2);

  
fputs($fp$fileHeadersTail);

  
$serverResponse "";
  while(!
feof($fp)) $serverResponse .= fgets($fp4096);
  
fclose($fp);
  
preg_match('<!-- X_SCAN_STATE: (.*) -->'$serverResponse$return);
  echo 
$return[1];


Last edited by StenLi : 01-08-2013 at 11:50 AM.
 
Old  
kerk
k0t
 
kerk's Avatar
Default 0

ну а почему нет?
 
Old  
kerk
k0t
 
kerk's Avatar
Default 0

чуть подрихтовал код функции
вместо циклов foreach(), код в одну строку
 
Old  
StenLi
На доске почёта
Пожизненный блэк
 
banned nax
Default 0

kerk, Было бы неплохо добавить проверку на прокси))

PS. или я не правильно понял применение.
 
Old  
kerk
k0t
 
kerk's Avatar
Default 1

применение простое
можно использовать заданные значения диапазонов IP из БД к примеру
структура таблицы
Code:
-----------------------------------------
id     | IpStart   | IpEnd
-------+------------+--------------------
1      |127.0.0.0  |127.255.255.255
-------+---------------------------------
или из файла данных диапазонов
или из настроек
не суть...
в первый аргумент функции, передаешь диапазон IP (который ты знаешь), второй аргумент если не указать, будет использован ИП клиента/узера
проверяешь, ИП узера, если он в указанном диапазоне, пропускаешь, нет, отлуп

если передавать и второй аргумент, то функцию можно использовать для проверки каких то своих данных или отладки (см. описание ф-ии)
как дополнение можно использовать простой кусок кода для запроса диапазона, по IP клиента
PHP Code:
$ip_addr '127.0.0.1'// или IPADDRESS
$fc file_get_contents('http://who.is/whois-ip/ip-address/' $ip_addr);
$ip_range '';
if(
preg_match("#(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} - \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})#s"$fc$matches))
{
      
//print_r($matches);
      
if($matches[1])
      {
            
$ip_range $matches[1];
      }
      unset(
$fc);
}
print 
'<hr />';
print 
$ip_addr " In the NetRange: " $ip_range;
print 
'<hr />';
if(
$ip_range AND $ret kr_verify_client_ip($ip_range$ip_addr))
{
      print 
'OK ' $ret;

код вернет примерно следующее
Code:
127.0.0.1 In the NetRange: 127.0.0.0 - 127.255.255.255
OK 3
ну и там еще пара вариантов есть
 
Old  
StenLi
На доске почёта
Пожизненный блэк
 
banned nax
Default 5

Сегодня понадобилось убрать нечесть в мобильных номерах типа.
Пользователи у меня любят в обьявлениях писать что-то типа: 8-906-0-6шесть6-300.
Накидал небольшую функцию.
Код быдловат, но на больше времени не хватило.
PS. Для Российских мобильных операторов.

PHP Code:
<?PHP
/*
Функция преобразования и проверки кривых мобильных номеров.
Делает из такого: 8-908-0-6шесть6-300
Использовать так: st_mobile_validate('8-906-0-6шесть6-300')
*/
function st_mobile_validate($number){

    
$m_validate_base = array(
        
"один"=>"1","два"=>"2","три"=>"3","четыре"=>"4",
        
"пять"=>"5","шесть"=>"6","семь"=>"7","восемь"=>"8","девять"=>"9",
        
"адин"=>"1","четыри"=>"4","читире"=>"4","читири"=>"4","восимь"=>"8",
        
"девить"=>"9","десять"=>"10","десить"=>"10","раз"=>"1","ноль"=>"0","("=>"",
        
"о"=>"0",")"=>""," "=>"","-"=>"","_"=>"","+7"=>"",
    );
// База кеев для проверки.

    
$number strtr($number,$m_validate_base);
    if(
$number[0] != '8'){ // Проверяем что есть первая восьмерка
        
$number '8'.$number;
    }
    if (
preg_match("!((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,11}!"$number)) { // Регулярка проверка номера
    
return $number;
    }
}

?>

Last edited by StenLi : 01-15-2013 at 01:12 AM.
 
Old  
Luvilla
Блондинка с электро......
 
Luvilla's Avatar
Default 0

Оффтоп
 
Old  
kerk
k0t
 
kerk's Avatar
Default 0

вариантов написания цифры буквами может быть множество, в том числе и смесь ру/англ букв
так что массив наверное должен быть более объемный и немного с другой структурой
нечтовроде этого
PHP Code:
$array = array(
    
=> array('один''адын''адин'),
    
=> array('два''дфа'),
    
=> array('три''three')
); 
в регулярке проверять строку из массива на совпадения и если найдено, возвращать соотв. цифру, иначе ноль
 
Old  
StenLi
На доске почёта
Пожизненный блэк
 
banned nax
Default 0

Quote:
Originally Posted by kerk View Post
вариантов написания цифры буквами может быть множество, в том числе и смесь ру/англ букв
так что массив наверное должен быть более объемный и немного с другой структурой
нечтовроде этого
У меня 12106 из ~ 14000 сошлось, учитывая все погрешности и отсутствия - это 98-99% нужных мне записей в бд.

Quote:
Originally Posted by kerk View Post
PHP Code:
$array = array(
 
=> array('один''адын''адин'),
 
=> array('два''дфа'),
 
=> array('три''three')
); 
Не вопрос, можно. Но через чур, да и время было ограниченное.

Quote:
Originally Posted by Luvilla View Post
в очередной раз испытала гордость! Велик русский язык, воистину....
и это ж таки не все возможные варианты....
Самое интересное, я как обычно сначала все сделал, потом уже накидал функцию, чтобы сюда выкинуть.
Забыл внести в массив фразу "нуль", которая по
PHP Code:
LIKE '%нуль%' 
встретилась > 50 раз.

Шифруются люди, не хотят видимо спам получать, НО новые правила на ресурсе заказчика - есть новые правила на ресурсе заказчика.


PS. Меня поразил гугл:
_http://eng5.ru/translator/numbers
_http://eng5.ru/words/english_numbers

Особенно линк __http://eng5.ru/table/numbers_1_1000
Ведь если взять все эти букво-цифры еще с падонским и ошибками, то массив получится больше чем на 3000-4000 значений.

Last edited by StenLi : 01-15-2013 at 02:00 AM.
 
 

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 06:46 AM.


Powered by vBulletin® Version 3.7.6
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.