Показаны сообщения с ярлыком web. Показать все сообщения
Показаны сообщения с ярлыком web. Показать все сообщения

вторник, 16 марта 2021 г.

Nginx - включение basic авторизации для определённых ip адресов

 Первым делом заготовим файл, в котором будем хранить перечень ip адресов, для которых будем производить авторизацию. Положим его в /etc/nginx/ipsets/authips.conf. Собственно его содержимое будет примерно таким:

...
deny 1.1.0.0/19;
deny 2.2.3.0/24;
deny 3.3.3.0/22;
deny 4.4.4.4/32;
...

Для того, чтобы авторизация заработала, нам также надо создать файл, содержащий учётные записи с паролями. Для этого с помощью утилиты htpasswd
 
(если таковой не нашлось в системе, то доставим её, находится она в пакете apache2-utils: sudo apt install apache2-utils) создаём его:

четверг, 1 октября 2020 г.

Посчитать количество ящиков в ящике через php

 Бывает знаешь размер коробки (скажем 100x100x100) и прикидываешь сколько маленьких коробок в эту одну большую коробку поместится. Тут один чувачок на стэке спросил как это делается на php и я быренько накидал функцию, собственно вот:

<?php function GetItemsInBoxQuantity ($boxsize = array(100, 100,100), $verifiable_item = array(50,50,50)) { # here we pass default values of box size and verifable items $boxspace = array_product($boxsize); $verifiable_item_space = array_product($verifiable_item); $count_boxes_in_boxspace = floor($boxspace / $verifiable_item_space); return $count_boxes_in_boxspace; } # Now we putting new values of box size and size of items $box = array(200,100,100); $verifiable_item= array(40,40,40); $result = GetItemsInBoxQuantity($box, $verifiable_item); echo 'We can put into box '.$result.' items.'; ?>

вторник, 25 декабря 2018 г.

Питонячая генерация sitemap для сайта

В общем тема старая - надо было нагенерить sitemap в XML формате для одного сайта... Дело было вечером, сайтик был зафигачен на одном популярном PHP фреймворке, да в котором генерация подобного рода файлов - вполне была не тривиальная задача (кода грудку написать и всё такое). А поскольку сайт вполне динамично менял у себя контент, то и генерить sitemap требовалось как можно почаще... Ну и вот я нашёл замечательную сборку скриптов (тискаем отсюда: https://github.com/c4software/python-sitemap ) для сего дела... Ща расскажу как пользоваться...


вторник, 17 июля 2018 г.

Недоделки для Ubuntu 18.04 bionic или как натянуть последнюю версию phpmyadmin...

Я тут напоролся на проблемку... Думал что такие недоделки только у почитателей технологии docker, но тут обломилось и мне малость... В общем говорят мне такие сверху мол а сделай ты машинку с набором софта в виде nginx+php-fpm+mysql+phpmyadmin для того чтобы новенького прогера в потенциале протестировать... Ну я так прикинул и развернул LXC контейнер с последней версией ubuntu 18.04 (bionic), на которую воткнул прям одной строкой сразу nginx+php-fpm+mysql, ну настроил я всё это дело и самым последним моментом тупо через apt install phpmyadmin получаю пламенный облом... В чём облом? Да нет, всё встало как надо, но как только я посоздавал пользователя и прилепил к нему новенькую БД - я полез под этим пользователем в админку phpmyadmin и попытался сделать тупо select из сделаной мною на скорую руку таблицы... В итоге получил портянку всяких ошибок. Полез гуглить... А там такое! Версия, которая накатывается из репов убунты вся в дырках аж мама не горюй, так что вопрос по инфосеку стал прям очень страшным, а гора ошибок что я видел - это не стыковка работы старой версии phpmyadmin с новым php 7.2. Да делов думаю... качну последний deb пакет да и всё... А репов для bionic'а нет... В итоге вот рецепт:

воскресенье, 17 июня 2018 г.

Про сайты или как и на чём базировать проекты

 Чего то давече не писал ничего, но на то были причины, ибо завален проектами... Но тут малость уже накипело и этот пост - это как бы мысли вслух... Так о чём я...

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

Пока сегодня сёрфил по страницам (не помню уже зачем полез), я обнаружил такую странную штуку, что народ по сей день задаётся вопросами на тему выбора движка сайта (а может и не движка, а просто CMS, но какой...). И тут я понял что я для себя выработал какой то свод определённых представлений ака правил на будущее, итак погнали...


среда, 31 мая 2017 г.

Проверка доменов на подыхание

У каждого домена есть свой срок окончания действия и чтобы не проморгать оплату за домен (а если у тебя их ещё и куча) - я написал скрипт. Выдержка из README:

This script is for checking expiration date of domains and alerting
Created by Constantine @ 2017 vi127001 [at] gmail.com

How to install:

sudo apt install python3-dateutil python3-pip && sudo -H pip3 install python-whois
git clone https://github.com/constantinekg/check_domain_expiration

How to modify:
Open domainchecker.py in text editor and make changes in global variables section.

How to use:
put script as example into /opt/domainchecker.py
change chmod:
chmod +x /opt/domainchecker.py
put it into crontab (every day at 01:01):
crontab -e
01 01 * * * /opt/domainchecker.py

четверг, 10 июля 2014 г.

Курсы валют из будущего и странности центрального банка России

Сначала предыстория... Мне понадобилось для одной хитрой платформы поставлять курсы валют. По умолчанию эта платформа умеет забирать курсы валют с национального банка Украины и с центрального банка России. При этом если допустим ты указываешь, что необходимо брать курсы валют с Украины, то там в перечне курсов появляется стоимость рубля в гривнах, а если берёшь курсы валют с ЦБР (центральный банк России), то там есть стоимость гривен. В целом на платформе по расписанию срабатывает скрипт, который забирает котировки в XML формате с сайтов банков, далее он их парсит и кладет в базу данных. Проблема вся в том, что формат представления XML отличается конкретно и по идее надо переписывать парсер. Но мне то надо забирать курсы валют с национального банка кыргызской республики (НБКР), а там вообще третий формат... Я решил пойти по наименьшему пути сопротивления - а именно забирать курсы с НБКР и приводить их в такой же вид, как XML у ЦБР, а дальше отдавать результат на саму платформу. Так вот у каждой валюты есть свой цифровой уникальный код + как оказалось у некоторых банков есть свой внутренний идентификатор каждой валюты (например у ЦБР выглядит примерно так - R01234). Так вот в XML у ЦБР я нашел идентификаторы под все вообразимые валюты, кроме рубля. Немного поставило меня в ступор, но я решил проблему тем, что для своего парсера валют ввёл внутренний идентификатор от балды. Ну как бы ладно - всё работает и хорошо... Далее я сливаю XML файл с НБКР (а дело было 9 июля) и глядя в него смотрю на дату актуальности курсов валют на определенный период и вижу что она равняется 10 июля (т.е. такое складывается ощущение, что в НБКР работают Нострадамусы и они наперед знают какой будет курс валют на завтра)... Ну как бы фиг с ним - главное что пашет... А теперь код:

Писано всё это дело на python 3 версии...

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Скрипт для сбора данных о курсах валют с НБКР с дальнейшим преобразованием вида XML файла
# Дата последнего исправления: 9.07.2014
# Разработал: Constantine
#------------------------------------------------------------------------------------------------------------------------------------

# Импорт необходимых модулей

from datetime import datetime
from urllib.request import Request, urlopen, urlretrieve
from urllib.error import  URLError
import xml.etree.ElementTree as etree
import os

# Начало программы
print ('\n \t',str(datetime.now()))
print ('-'*40)

# Объявление переменных

ndaily = ('daily.xml') # Необработанный XML файл, получаемый с www.nbkr.kg и находящийся в директории, где пашет парсер
geturl = ('http://www.nbkr.kg/XML/daily.xml') # Урл, откуда берём необработанный XML
rdaily = ('course.xml') # Куда будем сохранять данные

# Объявление функций


def checkget(text): # Функция проверки связи и доступности файла daily.xml на сервере НБКР
    req = Request(text)
    try:
        response = urlopen(req)
        return 1
    except URLError as e:
        if hasattr(e, 'reason'):
            print('Server nbkr.kg is unavaliable.')
            print('Reason: ', e.reason)
        elif hasattr(e, 'code'):
            print('Server return an error code.')
            print('Error code: ', e.code)
        else:
            # everything is fine
            print ('Ok')
        return 0

def restest(rfile):
    try:
        with open(rfile, 'r+') as file:
            pass
        return 1
      
    except IOError as e:
        print ("Cant find result file. Trying to create new...")
        return 0


def restest2(rfile):
    try:
        with open(rfile, 'w', encoding='utf8') as file:
            pass
        return 1
    except IOError as e:
        print ("Can't create result file. Check your permissions...")
        return 0

def parser(nd, rd):
    try:
        tree = etree.parse(nd)
        root = tree.getroot()
        f = open(rd, 'w', encoding='utf8')
        f.write('<?xml version="1.0" encoding="windows-1251" ?>\n')
        f.write('<ValCurs Date="'+root.attrib['Date']+'" ''name="'+root.attrib['Name']+'">\n')
       
        for i in range(len(root)):
            isocode = (root[i].attrib['ISOCode'])
            if isocode == 'USD':
                idc = 'R01235'
                numcode = '840'
                vname = 'Доллар США'
            elif isocode == 'EUR':
                idc = 'R01239'
                numcode = '978'
                vname = 'Евро доллар'
            elif isocode == 'KZT':
                idc = 'R01335'
                numcode = '398'
                vname = 'Казахский тенге'
            elif isocode == 'RUB':
                idc = 'R06785'
                numcode = '643'
                vname = 'Российский рубль'
            f.write('<Valute ID="'+idc+'">\n')
            f.write('    <NumCode>'+numcode+'</NumCode>\n')
            f.write('    <CharCode>'+isocode+'</CharCode>\n')
            f.write('    <Nominal>'+root[i].find('Nominal').text+'</Nominal>\n')
            f.write('    <Name>'+vname+'</Name>\n')
            f.write('    <Value>'+root[i].find('Value').text+'</Value>\n')
            f.write('</Valute>\n')
        f.write('</ValCurs>')
        f.close()
        return 1
    except:
        return 0

# Начало работы программы

print ('System check... ')

abc = checkget(geturl)

if abc < 1:
    print ('Can not establish a connection. Please check your channels')
elif abc == 1:
    print ('File on nbkr.kg is avaliable. \nDownload begining... ')
    destination = geturl.rsplit('/',1)[1]
    urlretrieve(geturl, destination)
    print ('File download ',geturl, 'is done.')
else:
    print ('Unexpected error. Programm exiting...')
   
if os.path.isfile(ndaily) and os.path.getsize(ndaily)>0:
    print ('File is ready... Data load is begining...')
else:
    print ('File not ready for loading, probably daily.xml is corupt!')


wt = restest(rdaily)

if wt==1:
    resp = parser(ndaily, rdaily)
elif wt==0:
    wta = restest2(rdaily)
    if wta ==1:
        print ('File course.xml has been created, Trying to parse and load data into file...')
        resp = parser(ndaily, rdaily)
    elif wta ==0:
        print ("Can't make result file. Please check your pewrmissions...")

if resp == 1:
    print ('Data load is done!\n'+'-'*40)
else:
    print ('Can\'t load data. File is unavaliable for write.')

# Конец программы


пятница, 18 апреля 2014 г.

Перенаправление для компонента xmap (Joomla 3) на сервере nginx

Как обычно - нужно поднять сайт на Joomla, ну и хотя бы чтобы что то начали индексировать поисковики... Самый попсовый и в 2 клика доступный - это компонент xmap. Компонент в качестве результата генерирует сложно составной url, но не все поисковики нормально работают со сложно составными ссылками, им б%я в таком виде подавай - site.com/sitemap.xml. Покувыркав гугл и почитав документацию, решение было очевидным - использовать rewrite на стороне сервера, да вот только всё расписано для apache, а за nginx ничего... Но решение было найдено и оно такое:

rewrite /sitemap.xml$ /index.php?option=com_xmap&no_html=1&view=xml&tmpl=component&id=1 last;

P.S: Спасибо Артуру...

воскресенье, 27 октября 2013 г.

Всё бывает в первый раз или мои впечталения от Javascript

Никогда на Javascript ничего не писал, но как обычно бывает - надо. В общем для одной фирмы понадобилось на их сайте разместить калькулятор. Вроде ничего сложного - взял значения из текстовых полей и произвёл вычисления по определенной формуле, заодно выполнив валидацию на наличие каких либо данных в этих текстовых полях. Легкотня подумал я... Сначала я полез в интернет за готовыми примерами и как таково поиску описаний определённых функций. В итоге я потратил порядка полтора часа на написание этого калькулятора... Самое смешное что меня затормозило, так это то, что я расслабился за всякими там php и подобными языками и совсем забыл про то, что типы переменных необходимо предопределять... Иначе говоря при моих жалких попытках сложить 2 значения переменных у меня в качестве результата получался итог операции конкатенации замесь сложения. А ещё я подумал о том, на сколько коряво обозваны функции. В итоге я получил порцию негатива несмотря на положительный результат. Никогда процесс созидания не доставлял мне подобных негативных ощущений.

понедельник, 24 июня 2013 г.

Picozu - облачный фотошоп или редактируем изображения прямо из браузера

Если прогуляться по ссылке http://www.picozu.com/editor/ , то в окне вашего браузера откроется вполне приличный редактор изображений почти тянущий на функционал Adobe Photoshop или открытого редактора Gimp. Довольно удобная штука если у тебя скажем какой нибудь планшет или телефон на диковинных операционных системах или тебе тупо лень что то устанавливать...


вторник, 3 апреля 2012 г.

Размышления на тему безопасности web

После прочтения довольно неплохого обзора на тему безопасности веб приложений ( http://goo.gl/ATZzP ), я решил провести для себя одно исследование. В обзоре больше описывались такие темы как наличие на машинах каких то руткитов и способы противостояния им. А я вот подумал о более тривиальных и наиболее распространённых вещах. Я пересканировал отдельно взятую подсеть одного провайдера и пришёл к выводу, что народ не шибко то и печётся в вопросах устойчивости различных web сервисов к различного рода атакам. Из 254 пересканированных мной хостов может процентов 30 оказалось за какими то файрволами и с имеющимися надлежащими заплатками, остальные увы оказались по каким либо критериям возможными к компроментации. В этом зоопарке устройств имелись хосты как windows-based, так и unix-based, а также различного рода маршрутизаторы и voip шлюзы. Особо отметил то, что народ откровенно описывал предназначение той или иной машины прямо в имени хоста. К примеру особо не парясь, я узнал что такая то машина - узел одной платежной системы, а в имени другой было написано Nashalnike. Отмечу сразу, что наиболее податливыми к взлому оказались машинки на windows (а потому что народ видать жмотится платить за лицензию и вовремя подкачивать обновления). Не остались под защитой всеми хвалёные линуксы и прочие юниксы - обнаружились и возможность отказа работы служб и удалённое выполнение произвольного кода и т.д. Что же касается каких либо маршрутизаторов и voip шлюзов, то там также обнаружились возможности выполнения произвольного кода атакой на telnet. Вы спросите причем тут web? Да почти на всех этих машинках крутился какой то веб сервер и почти на всех них можно было посмотреть какой то контент. Отдельные товарищи не стали вообще как то париться и оставили открытыми к доступу базы данных с учётными записями пользователей, которые идут с этими базами данных по умолчанию. Не буду сильно углубляться в дебри аспектов безопасности, но в свете всего этого держателям различных web проектов я бы хотел сказать следующее:

1. Держите впереди вашей инфраструктуры какой никакой файрвол
2. Вовремя обновляйте программное обеспечение, благо на это существуют и автоматическая загрузка обновлений и различные списки рассылок, подписавшись на которые вы будете иметь актуальную информацию об обновлениях вашего любимого программного обеспечения.
3. Переодически (ну или хотя бы как только уже установили всё необходимое ПО (от веб сервера до вашего любимого блог движка) устраивайте пентесты на возможность проникновения.
4. Не используйте простые пароли (да я понимаю что вы где то это уже не раз слышали, но по всей видимости авось у вас в головах иногда берёт верх).
5. Если вы сомневаетесь (ну хотя бы хоть где то), что вы несколько некомпетентны в вопросах поддержки сервисов и обеспечения надлежайшей безопасности - перепоручите вопросы профессиональным компаниям (порой некоторые издержки бывают довольно оправданы).

Как гласит одна поговорка - всё что создано человеком, человеком же может и быть взломанно, т.е. вы всё равно никогда не убережётесь на все 100%, но вы можете свести эту возможность к минимуму.

среда, 11 января 2012 г.

На youtube живёт змея...

Да да! Самая настоящая и даже с ней можно поиграть... Для этого начинаем загружать какой нибудь ролик на youtube. Что мы видим сначала (пока ещё ролик неподгружен и не стартанул), так это вращающиеся по кругу шарики (ожидание загрузки). А теперь жмём на клавиатуре вправо или влево или вверх или вниз и начинаем играть в классическую игру змейка.

пятница, 16 декабря 2011 г.

NVU - альтернатива Dreamweaver

Сидел сидел разрабатывал один проектик, работа над которым связана чисто с HTML... Писался он изначально мною по средствам использования ОС Windows и Adobe Dreamweaver. Ребутнулся в родимый линукс десктоп и понял что я остался без Dreamweaver'а... Из-за того, что было ну совсем неохота обратно ребутиться в винду накопал для линукса замечательненький редактор - NVU. Штука понравилась и принята на вооружение, тем более что разработчики утверждают что они доведут функционал софтины до уровня Dreamweaver'а...


среда, 14 декабря 2011 г.

Байка о том, как жил и живёт Интернет в Кыргызстане

Как всё начиналось...

Изначально в Кыргызстане было всего 2 провайдера - компании Элькат и компания АзияИнфо. Право владения зоной KG было отведено компании АзияИнфо, которая и по сей день предоставляет возможность делегирования доменов второго уровня для всех желающих. Так исторически получилось, что в Кыргызстане появилось такое понятие как пиринг - местные провайдеры объединены по средствам единой точки обмена трафиком между собой, что тем самым значительно снижает стоимость коммутации трафика, что в свою очередь снижает стоимость и для конечных пользователей. Точку обмена трафиком контролирует компания АзияИнфо, а участники в точке обмена объединены в Ассоциацию Операторов Связи (www.connect.kg) В 90-х годах мало у кого был доступ в интернет по выделенным каналам связи и в основном все выходили в сеть по средствам dialup подключений. Стоимость доступа в основном рассчитывалась по времени dialup сессии и как таково развлечение это было не из дешёвых. Отдельно можно рассказать о том, что усилиями различных общественных организаций пользователям предоставлялся доступ (как правило 1 час в день и по предварительной записи) в глобальную сеть. Так к примеру можно было прийти в библиотеку имени Ленина и заранее записаться на какое либо время чтобы можно было посидеть в интернете. В Ленинке таких возможностей было две - класс с компьютерами на втором этаже библиотеки (его спонсировал фонд Сороса) и на первом этаже - представительство организации Freenet. В начале 21 века ситуация начала мало мальски изменяться в лучшую сторону. Практически все провайдеры стали предоставлять услугу доступа в интернет по средствам *DSL. Но даже на тот момент это было не всем по карману... Затем стали появляться провайдеры, которые тянули "домашние сети", - километры кабеля, свисающие с крыш домов. Данный факт позволил значительно снизить стоимость коммутации. На фоне данных событий не отставали и операторы сотовой связи, которые привнесли на рынок возможность доступа в Интернет по технологиям GPRS, CDMA 1x, 3G и сейчас на рынке уже появилась возможность доступа в интернет по технологии LTE, которую предоставляет компания Saimatelecom.

Великие сервисы Кыргызстана...

Интернет не был бы Интернетом, если бы на его просторах не находилось бы никакой информации... Так и в Кыргызстане с самого начала стали появляться местные информационные ресурсы. Самыми яркими представителями в 90-х годах стали такие ресурсы как chat.elcat.kg (ныне закрыт по этическим соображениям), www.chat.kg (чат "Шалаш" - не знаю кого либо кто в него до сих пор заходит, но мало ли...).

Самым выразительным в то время ресурсом пожалуй стал форум diesel - (diesel.elcat.kg). С тех пор форум притерпел массу изменений, но как и тогда, так и сейчас он является центральной площадкой для обсуждения почти всех вопросов в Кыргызстане. Как однажды сказал мой один приятель diesel - это памятник. Да так оно и есть... Малик (основатель diesel'я) отстроил данный ресурс в память о Саше Кельметове (в 90-х в ходе налёта бандитов на офис компании Элькат Саша был убит). И считается по сей день так, что если Малику надоест, то diesel исчезнет (хотя лично мне так не кажется, ибо сторонников у проекта навалом).

Время шло, росли провайдеры, росли в количестве пользователи, росли ресурсы... И вот в 2006 году мне посчастливилось поучаствовать в становлении ещё одного гиганта - www.torrent.kg (первая пиринговая сеть в Кыргызстане). Как мы тогда шутили - именно пиринговые сети заставят провайдеров расширять пропускную способность на своих линиях связи. Может быть так и получилось (просто никто и не признался бы :))... Сейчас уже имеется масса клонов данного проекта, но он по сей день является одним из самых посещаемых ресурсов страны.

Отдельно можно ещё рассказать за компанию Namba. Эти ребята появились относительно недавно и уже успели завоевать всенародную любовь своим обилием сервисов, среди которых есть почтовый сервис, файл хостинг, инструменты для общения и т.д.

Кто в теремке живёт...

Да... а кто? Люди собираются в различные сообщества по интересам. В принципе все они опять же как правило представлены на форуме diesel или в различных чатах. По выходным или договорённости эти орды людей собираются в пабах и не щадя свои организмы обсуждают свои любимые темы.

А я тусю...

На протяжении уже нескольких лет в Кыргызстане существует сообщество пользователей операционной системы Linux. Участниками за время существования были созданы зеркала различных дистрибутивов в сегменте Кыргызстанской зоны (kg), а также файловые архивы и новостные ленты, в центре внимания сайт - www.linux.kg. Если в юниксовой среде все как правило сидят на каналах бессмертного чата IRC, то у нас как то так сложилось (по разным причинам) что участники LUG Кыргызстан сидят в группе, попасть в которую можно установив Skype и далее приглашённым в группу одним из имеющихся уже на тот момент участником. Поразительно, но группа уже существует года 2-3 :). А ещё я состою в группе GTUG - http://groups.google.com/group/bishkek-gtug?hl=ru.

Напоследок...

А дальше у нас будет ещё всё круче, ибо самые ацкие хакеры именно из Кыргызстана :).