Page 11 of 16

GZIP & HTML Compress – WordPress Plugin

GZIP & HTML Compress – WordPress Plugin

Plugin do WordPressa, który po prostu usuwa zbędne znaki dzięki czemu rozmiar dokumentu przesyłanego do przeglądarki jest średnio o ~ 10% mniejszy dzięki temu zaoszczędzamy transfer oraz przyspieszamy wczytywanie strony.

Działa z osadzonym kodem JavaScript (<script></script>) oraz CSS (<style></style>), działa także ze znacznikami PRE, TEXTAREA (<pre></pre>,<textarea></textarea> – nie są one w ogóle kompresowane)

Dodatkowo osadzony JavaScript kompresuje za pomocą specjalnych tablic, niezależnie od kodu html tak samo z osadzonym CSS, wykorzystuje w tym celu dwie funkcje, pierwsza z nich to compress CSS code – compressor, a druga to compress JavaScript code – compressor.

Dodatkowo uruchamia kompresję GZIP, która powoduje zmniejszenie rozmiaru wysyłanego dokumentu do przeglądarki o około ~ 80% (polega to na tym, że jeśli przeglądarka obsługuje kompresje GZIP przesyłany jest do niej skompresowany dokument który jest o około ~ 80% mniejszy następnie przeglądarka go rozpakowuje i odczytuje, jeśli przeglądarka nie obsługuje GZIP dokument przesyłany jest bez kompresji)

Kategorycznie zalecam korzystanie z tej wtyczki równocześnie z wtyczką WP Super Cache!!!

Co dokładnie jest usuwane?
Otóż w kompresji HTML usuwane są takie zbędne śmieci jak:

  • Przejście do nowej linii (new line)
  • Powrót karetki (carriage return)
  • Usuwana jest Vertical Tab
  • Wszystkie tabulatory(oraz więcej wystąpień niźli jedno) zamieniane są na pojedynczą spację
  • Puste bajty, znaki zerowe
  • Każde wystąpienie spacji powyżej jednej jest zamieniane na zwykłą pojedynczą
  • Komentarze HTML, za wyjątkiem komentarzy warunkowych dla przeglądarki Internet Explorer

Zmniejsz zużycie transferu oraz przyspiesz ładowanie i renderowanie stron w wordpressie!

Dla porównania przykładowa strona która korzysta z tej wtyczki, oraz ta sama strona bez wtyczki (obydwie przy wykorzystaniu kompresji GZIP)

Wtyczka włączona?Oryginalny rozmiar (w bajtach)Rozmiar po kompresji GZIP(w bajtach)Procent kompresji GZIP(w procentach)
Tak16,4545,90064.1
Nie18,0136,54463.7

Dodatkowo prócz oszczędności i szybkości utrudniamy złodziejom kodu pracę… Znów przypominam, że zalecam korzystanie z tej wtyczki przy równoczesnym wykorzystaniu WP Super Cache.

Nazwa wtyczki: GZIP & HTML Compress
Najnowsza wersja: 0.1
Znane błędy:

  • W wersji 0.1 wyłączona została kompresja osadzonego kodu JavaScript
  • Brak innych błędów
Changelog
  • Version: 0.1 – first release, no compress embeded script’s
Download

Download: GZIP & HTML Compress 0.1

Installation

Skopiuj folder /gzip-html-compress/ do folderu /wp-content/plugins/. Następnie przejdź do panelu administratora do sekcji: Wtyczki i odnajdź na liście wtyczkę o nazwie: GZIP & HTML Compress, tuż pod jej nazwą wciśnij przycisk Aktywuj.

Jeśli używasz WP Super Cache po włączeniu wtyczki wyczyść cache i dopiero efekty będą widoczne.

błąd w mBank kanał dostępu internet – limity karty debetowej transakcje bezgotówkowe

Błąd w mBanku przy ustalaniu limitów dla kart – limit: transakcje bezgotówkowe

Jakby tego było mało, że kurwa za błędne logowania blokują konto w pizdu i trzeba spierdolić się z kasy na telefonie żeby potem zadzwonić na kurewsko droga mLinię z której ni chuja nie skorzystasz jeśli nie aktywowałeś kanału telefonicznego (mLinia) poprzez kanał internetowy…

W skrócie żeby odblokować kanał internet zablokowany błędnymi logowaniami w mBanku musisz najpierw mieć dostęp do tegoż to kanału aby móc aktywować kanał telefoniczny na ironię zowiący się mLinia… Czyż to nie pojebane? Można by powiedzieć: polska… ale trzeba dodać: nawet banki są pojebane… Otóż po zablokowaniu konta otrzymujemy cudowna informację:

Błąd systemu
Kanał Internet został zablokowany.
Aby odblokować dostęp do mBanku przez Internet należy:

  • zadzwonić na mLinię: 0-801 300 800,
  • wybrać opcję “1”,
  • zidentyfikować się podając numer Klienta i wybrane cyfry telekodu,
  • wybrać opcję “4”, a następnie postępować wg wskazówek systemu.

Pierwsze po odblokowaniu kanału logowanie do systemu transakcyjnego wymaga zmiany hasła dostępu.
mbank kanał internet został zablokowany

I jak kurwa na złość podają w cudnym komunikacie numer tylko dla numerów stacjonarnych, nie męcz się dzwoniąc z komórki… jeb to i przebrnij przez gąszcz ich stron by odnaleźć informacje o mLini i doszukaj się w treści numeru dla telefonów komórkowych. Ważne! : pamiętaj, że to połączenie jest zajebiście kurewsko drogie! proponuję się najpierw zapoznać z instrukcja obsługi mLini na ich stronie WWW a potem dzwonić i z niesamowitym refleksem olewać lektora i ciskać wyuczone klawisze bez myślenia!

Chyba, że zdecydujesz się na bezpośredni kontakt z operatorem… gratuluję majętności… no i niestety ale współczuje bo musimy porozmawiać z operatorem jeśli nie mieliśmy aktywnego dostępu telefoniczne (tak zwany telekod)… po prostu chujnia ale tu nie o niej.

Limit Karta Debetowa mBank – eKonto oraz izzyKarta

Otóż natknąłem się na błąd przy ustawianiu limitów dla mej karty debetowej, a konkretniej: Rodzaj limitu: Transakcje bezgotówkowe i inne podlimity:

  • Transakcje bezgotówkowe
    • Transakcje korespondencyjn­e i telefoniczne
    • Transakcje internetowe

Chciałem sobie tylko kurwa mać zwiększyć limit by móc gdzieś w necie wykorzystac kartę do płatności ale ni chuja… napotkałem błąd w mBanku w kanale dostępu internet. w Sekcji karty >> parametry >> zmień limity próby zmiany limitów dla transakcji bezgotówkowych kończą się błędami systemu…

Czym są spowodowane te błędy? Moim zdaniem i obstawiam, iż tak jest, jest to po prostu błąd jakieś pr0 programisty, który nie pomyślał, że kurwa każda liczba nie ujemna jest większa od zera (R+>0)… Płacili słone pieniądze a trafił się ćwok co znaki mniejszości pomylił…

Aktualnie me limity wyglądają tak ja na obrazku, limity miesięczne gdzie się dało to dziewięćset dziewięćdziesiąt dziewięć milionów dziewięćset dziewięćdziesiąt dziewięć tysięcy dziewięćdziesiąt dziewięć groszy, po prostu prawie 100 (sto) milionów (mln) bez jednego grosza: 999 999 999,99 PLN.
mbank limity limit dla karty debetowej debetowa

Zwróćmy uwagę na limit transakcji bezgotówkowych i poszczególne limity (ja je nazywam podlimity) i niestety lecz poszczególne limity Limit obecny(PLN) maja ustawione na zero 0,00 PLN miesięczny oraz dzienny… a limit dla transakcji bezgotówkowych dzienny wynosi: 500,00 PLN, miesięczny: 10 000,00 PLN. Ok w takim razie zmieńmy wielkość podlimitów (poszczególnych limitów).

Transakcje korespondencyjn­e i telefoniczne

Zaczniemy od Transakcje korespondencyjn­e i telefoniczne, szczerze powiem, że nie wiem do czego to jest… ale zmieńmy sobie limit na mniejszy niż Transakcje bezgotówkowe pozwalają.
Nowy limit dzienny: 100 PLN
Nowy limit miesięczny: 1000 PLN
I co kurwa? Po zmianie limitu wyskakuje komunikat:

Operacja wykonana niepoprawnie
POSZCZEGÓLNE LIMITY NIE MOGĄ BYĆ WIĘKSZE OD LIMITU BEZGOTÓWKOWEGO
poszczególne limity nie mogą być większe od limitu bezgotówkowego

Nie ma chuja ten sam błąd wyskakuje przy zmianie tylko na przykład limitu dziennego lub tylko limitu miesięcznego.

Transakcje internetowe

Kolejnym limitem są Transakcje internetowe, otóż postępujemy tak samo jak z Transakcje korespondencyjn­e i telefoniczne, zmieniajac limity znowu wyjebie nam komunikat:

Operacja wykonana niepoprawnie
POSZCZEGÓLNE LIMITY NIE MOGĄ BYĆ WIĘKSZE OD LIMITU BEZGOTÓWKOWEGO
poszczególne limity nie mogą być większe od limitu bezgotówkowego

Jakaś zbieżność? Czyżby to przez te zera? przekonajmy się…

Transakcje bezgotówkowe

Obecny limit dzienny: 500,00 PLN
Obecny limit miesięczny: 10 000,00 PLN
Spróbujemy najpierw zwiększyć limit do dowolnych kwot (oczywiście limit dzienny jest mniejszy od limitu miesięcznego) na przykład: Dzienny: 1000 PLN, Miesięczny: 100000 PLN.
Zapierdoli nam komunikatem o błędzie:

Operacja wykonana niepoprawnie
LIMIT BEZGOTÓWKOWY NIE MOŻE BYĆ MNIEJSZY OD POSZCZEGÓLNYCH LIMITÓW
mbank limit bezgotówkowy nie może być mniejszy od poszczególnych limitów

Że co kurwa? Zero jest większe od tysiąca lub stu tysięcy? Ja pierdole… I mamy błąd… Ciekawe na jakich zasadach pisali to programiści, jest różnica między < (mniejszy niż), a > (większy niż)… w takim razie po kolejnych próbach zmian tylko limitu dziennego lub miesięcznego nie przynoszących żadnych efektów napisałem na mChacie kilka miesięcy temu zgłosiłem ten błąd, niedawno znowu, niestety ten czat to nie jakiś bug tracker pomaga tylko w działających funkcjach banku tak czy siak mogliby kogoś poinformować…

Oczywiste skierowali mnie na mLinię, niestety ja kurwa nie będę płacił za czyjeś błędy! Wolałbym dzwonić z głuchymi telefonami za te pieniądze… Oczywiście pomoc była miła, nie narzekam oraz szybka. Zapewne po telefonie na mLinię zmieniłbym limity ale mnie to jebie, ja korzystam z kanału internet

Próbując wpisać liczbę ujemną nie przejdzie przez parser JavaScript a nie chce mi się kombinować, kiedyś chciałem skorzystać ze swojej karty w internecie nie wkurwiłem się bo zrobiłem po prostu przelew, niewiele dłużej trwał (48h) i przy okazji błąd odkrył żem w banku w którym to nie powinno się zdarzać (tak mi się wydaje?), zwłaszcza taki prosty błąd jak porównywanie liczb… tu już kurwa polegli… I niestety ale pozostaję z limitami 0,00 PLN, bo nie wydałem nic na mLinię i wątpie bym to zrobił… No może jak swoje konto kiedyś błędnymi próbami logowania zablokuje (za wczasu włączyłem sobie kanał dostępu TELESERWIS (MLINIA))

Teraz będę lansował ten art by wykazać że to co płatne i ma ukryty kod ma więcej błędów, trzeba obmyślić idealny sposób jak móc zarabiać na otwartym kodzie… wydaje się awykonalne, lecz niedawno mogliśmy śnić o komputerach wielkości książki (kiedyś jeden komputer zajmował ze 4 duże pokoje i był słabszy od ruskiej gierki 9999 in 1)

usuwanie znaków specjalnych z kodowania iso-8859-2 latin2

usuwanie znaków specjalnych z kodowania iso-8859-2 latin2

Często zachodzi potrzeba zamiany ogonków na ich graficzne odpowiedniki bez ogonków w kodowaniu ASCII. Najczęściej służy to do przygotowania tekstu wo wyświetlenia w adresie urluri. Lecz niestety jest to zależne od użytego kodowania na stronie jak i bazie danych MYSQL.

Ponieważ najczęściej wykorzystujemy podmianę znaków specjalnych, narodowych, diakrytycznych w przygotowywaniu przyjaznych adresów – friendly URL ze słowami kluczowymi dlatego też potrzebujemy dynamicznej funkcji która to zrobi za nas automatycznie.

Tutaj prezentuję tablice oraz funkcje specjalnie dla kodowania iso-8859-2, znanego pod nazwą latin2, jeszcze inna nazwa to ISO/IEC 8859-2 jak i kodowanie środkowoeuropejskie oraz wschodnioeuropejskie. Może jest to dosć zacofane kodowanie lecz nadal często używane na stronach WWW oraz bazach mysql (latin2) ze względu na obsługę polskich znaków diakrytycznych.

Kodowanie iso-8859-2 obsługuje takie języki jak (pod względem znaków narodowych – specjalnych):

  • Polski
  • Bośniacki
  • Chorwacki
  • Czeski
  • Węgierski
  • Serbski (w transkrypcji łacińskiej)
  • Serbsko-Chorwacki
  • Słowacki
  • Słoweński
  • Górnołużycki
  • Dolnołużycki
  • Angielski
  • Niemiecki
  • sporną kwestią jest język Fiński

Jednakże zalecą się stosowanie kodowań zgodnych z Unicode np. utf-8, ponieważ mimo iż iso-8859-2 wydaje się obsługiwać wiele języków obsługuje ono tylko podstawy i w swoim asortymencie posiada tylko niewiele znaków specjalnych, oraz cała tablica kodowania jest skromna.

O co chodzi w tej konwersji iso-8859-2 to ASCII, otóż o to by zamienić np. nasze polskie ć na jego odpowiednik c który może być obsłużony w adresach URL przez przeglądarki i niestety trzeba postąpić tak z każdym zadaszkowanym i ogonkowym znakiem. Ř -> R i tym podobne…

Poniżej przedstawiam tablice do użytku nie komercyjnego, które ostatnio sobie stworzyłem do przygotowania przyjaznych adresów w kodowaniu iso-8859-2. Są niewrażliwe na kodowanie pliku w którym są zapisane ponieważ korzystają z wartości heksadecymalnych popularnie zwane HEX. Zamieniają każdy znak na jego graficzny odpowiednik, działają z wielkimi jak i małymi literami! Oczywiście zamieniają także polskie znaki!

$map_latin2=array(
"\xa1","\xa3","\xa5","\xa6","\xa7","\xa9","\xaa","\xab","\xac","\xae","\xaf",
"\xb1","\xb3","\xb5","\xb6","\xb9","\xba","\xbb","\xbc","\xbe","\xbf","\xc0",
"\xc1","\xc2","\xc3","\xc4","\xc5","\xc6","\xc7","\xc8","\xc9","\xca","\xcb",
"\xcc","\xcd","\xce","\xcf","\xd0","\xd1","\xd2","\xd3","\xd4","\xd5","\xd6",
"\xd7","\xd8","\xd9","\xda","\xdb","\xdc","\xdd","\xde","\xdf","\xe0","\xe1",
"\xe2","\xe3","\xe4","\xe5","\xe6","\xe7","\xe8","\xe9","\xea","\xeb","\xec",
"\xed","\xee","\xef","\xf0","\xf1","\xf2","\xf3","\xf4","\xf5","\xf6","\xf8",
"\xf9","\xfa","\xfb","\xfc","\xfd","\xfe",
);
//Tablice znakow diakrytycznych 
//dla kodowania iso-8859-2 (latin2)
//by tosiek - https://tosiek.pl/
$map2_latin2=array(
"\x41","\x4c","\x4c","\x53","\x53","\x53","\x53","\x54","\x5a","\x5a","\x5a",
"\x61","\x6c","\x6c","\x73","\x73","\x73","\x74","\x7a","\x7a","\x7a","\x52",
"\x41","\x41","\x41","\x41","\x4c","\x43","\x43","\x43","\x45","\x45","\x45",
"\x45","\x49","\x49","\x44","\x44","\x4e","\x4e","\x4f","\x4f","\x4f","\x4f",
"\x78","\x52","\x55","\x55","\x55","\x55","\x59","\x54","\x73\x73","\x72","\x61",
"\x61","\x61","\x61","\x6c","\x63","\x63","\x63","\x65","\x65","\x65","\x65",
"\x69","\x69","\x64","\x64","\x6e","\x6e","\x6f","\x6f","\x6f","\x6f","\x72",
"\x75","\x75","\x75","\x75","\x79","\x74",
);

Na pierwszy rzut oka nie są czytelne, lecz poniżej prezentuję ich wersję z której odradzam korzystać, ponieważ taki plik z poniższymi tablicami musi być bezwzględnie zapisany w kodowaniu iso-8859-2 (trzeba się pilnować), także do użytku niekomercyjnego:

$map_latin2=array(
'Ą','Ł','Ľ','Ś','§','Š','Ş','Ť','Ź','Ž','Ż',
'ą','ł','ľ','ś','š','ş','ť','ź','ž','ż','Ŕ',
'Á','Â','Ă','Ä','Ĺ','Ć','Ç','Č','É','Ę','Ë',
'Ě','Í','Î','Ď','Đ','Ń','Ň','Ó','Ô','Ő','Ö',
'×','Ř','Ů','Ú','Ű','Ü','Ý','Ţ','ß','ŕ','á',
'â','ă','ä','ĺ','ć','ç','č','é','ę','ë','ě',
'í','î','ď','đ','ń','ň','ó','ô','ő','ö','ř',
'ů','ú','ű','ü','ý','ţ',
);
//Tablice znakow diakrytycznych 
//dla kodowania iso-8859-2 (latin2)
//by tosiek - https://tosiek.pl/
$map2_latin2=array(
'A','L','L','S','S','S','S','T','Z','Z','Z',
'a','l','l','s','s','s','t','z','z','z','R',
'A','A','A','A','L','C','C','C','E','E','E',
'E','I','I','D','D','N','N','O','O','O','O',
'x','R','U','U','U','U','Y','T','ss','r','a',
'a','a','a','l','c','c','c','e','e','e','e',
'i','i','d','d','n','n','o','o','o','o','r',
'u','u','u','u','y','t',
);

Posiadając tablice znaków diakrytycznych możemy zamienić te znaki na ich odpowiedniki – funkcja str_replace(), lecz to nie jest całkowite przygotowanie adresów URL należy się także pozbyć znaków specjalnych, przestankowych i tym podobnych, które nie są obsługiwane w adresach. Tutaj wykorzystamy wyrażenia regularne (regular expressions) – funkcja preg_replace(), które zamienią każdy znak nie wchodzący w skład wyrazów na myślniki (-) lub podkreślniki – znaki podkreślenia (_), zależy kto jak woli, następnie musimy usunąć te znaki z początku i końca, wykorzystamy funkcję trim() z dodatkowym parametrem.

Ci którzy chcą by adresy były złożony tylko z małych liter muszą użyć funkcji strtolower()

Adresy URL – URI ze słowami kluczowymi

Wiec zaczynamy sobie pisać funkcję specialchar_latin2() która jako jedyny argument przyjmuje ciąg który przygotowuje do wyświetlenia adresu URL:

function specialchar_latin2($url) {
//specialchar_latin2 by tosiek https://tosiek.pl/
	global $map_latin2,$map2_latin2;
	$url = str_replace($map_latin2,$map2_latin2,$url);
	return $url;
}

Należy pamiętać by tablice ze znakami narodowymi były zdefiniowane poza – przed funkcją. Ciąg zażółć?gęślą !?jaźń;;\ZAŻÓŁĆ []GĘŚLĄ (JAŹŃ-- po przejściu przez tę funkcję będzie miał postać: zazolc?gesla !?jazn;;\ZAZOLC []GESLA (JAZN–, nie nadaje się do wykorzystania w adresie.
Jak na razie funkcja zamienia tylko znaki narodowe z tablic, dodajmy do niej wyrażenie regularne zamieniające wszystko co nie jest znakiem wchodzącym w skład słów i występujące jeden raz lub więcej na myślnik – (kto woli podkreślnik _), posłużymy się zdefiniowaną klasą negującą znaki wchodzące w skład słów \W

function specialchar_latin2($url) {
//specialchar_latin2 by tosiek https://tosiek.pl/
	global $map_latin2,$map2_latin2;
	$url = str_replace($map_latin2,$map2_latin2,$url);
	$url = preg_replace('#[\W]{1,}#','-',$url);
	return $url;
}

Teraz zamieniamy wszystko co zbędne (spacje, wykrzykniki, znaki zapytanie i tym podobne na myślniki. Ciąg zażółć?gęślą !?jaźń;;\ZAŻÓŁĆ []GĘŚLĄ (JAŹŃ-- po przejściu przez funkcję miałby postać: zazolc-gesla-jazn-ZAZOLC-GESLA-JAZN-, lecz jak widać pozostał myślnik na końcu, może także czasami pozostać na początku co jest całkowicie zbędne, użyjemy funkcji trim() do jego usunięcia:

function specialchar_latin2($url) {
//specialchar_latin2 by tosiek https://tosiek.pl/
	global $map_latin2,$map2_latin2;
	$url = str_replace($map_latin2,$map2_latin2,$url);
	$url = preg_replace('#[\W]{1,}#','-',$url);
	$url = trim($url,'-');
	return $url;
}

Teraz ciąg miałby postać: zazolc-gesla-jazn-ZAZOLC-GESLA-JAZN, a co jeśli byśmy chcieli by składał się z małych estetycznych liter? Wystarczy skorzystać z funkcji strtolower() zamieniającej wielkie litery na małe.

function specialchar_latin2($url) {
//specialchar_latin2 by tosiek https://tosiek.pl/
	global $map_latin2,$map2_latin2;
	$url = str_replace($map_latin2,$map2_latin2,$url);
	$url = preg_replace('#[\W]{1,}#','-',$url);
	$url = trim($url,'-');
	$url = strtolower($url);
	return $url;
}

Teraz otrzymujemy oczekiwany efekt zazolc-gesla-jazn-zazolc-gesla-jazn, zamienione znaki narodowe na ich odpowiedniki, spacje i inne znaki specjalne zamienione na myślniki (lub podkreślniki) oraz cały ciąg pisany mała czcionką bez wielkich liter. Taki ciąg można wykorzystać w adresie URL.

Bardzo przydatna rzecz do tworzenia przyjaznych adresów ze słowami kluczowymi. Oczywiście dla kodowania iso-8859-2, które niestety nadal jest w użyciu.

Funkcja specialchar_latin2() w ostatecznej wersji:

$map_latin2=array(
	"\xa1","\xa3","\xa5","\xa6","\xa7","\xa9","\xaa","\xab","\xac","\xae","\xaf",
	"\xb1","\xb3","\xb5","\xb6","\xb9","\xba","\xbb","\xbc","\xbe","\xbf","\xc0",
	"\xc1","\xc2","\xc3","\xc4","\xc5","\xc6","\xc7","\xc8","\xc9","\xca","\xcb",
	"\xcc","\xcd","\xce","\xcf","\xd0","\xd1","\xd2","\xd3","\xd4","\xd5","\xd6",
	"\xd7","\xd8","\xd9","\xda","\xdb","\xdc","\xdd","\xde","\xdf","\xe0","\xe1",
	"\xe2","\xe3","\xe4","\xe5","\xe6","\xe7","\xe8","\xe9","\xea","\xeb","\xec",
	"\xed","\xee","\xef","\xf0","\xf1","\xf2","\xf3","\xf4","\xf5","\xf6","\xf8",
	"\xf9","\xfa","\xfb","\xfc","\xfd","\xfe",
);
//Tablice znakow diakrytycznych 
//dla kodowania iso-8859-2 (latin2)
//by tosiek - https://tosiek.pl/
$map2_latin2=array(
	"\x41","\x4c","\x4c","\x53","\x53","\x53","\x53","\x54","\x5a","\x5a","\x5a",
	"\x61","\x6c","\x6c","\x73","\x73","\x73","\x74","\x7a","\x7a","\x7a","\x52",
	"\x41","\x41","\x41","\x41","\x4c","\x43","\x43","\x43","\x45","\x45","\x45",
	"\x45","\x49","\x49","\x44","\x44","\x4e","\x4e","\x4f","\x4f","\x4f","\x4f",
	"\x78","\x52","\x55","\x55","\x55","\x55","\x59","\x54","\x73\x73","\x72","\x61",
	"\x61","\x61","\x61","\x6c","\x63","\x63","\x63","\x65","\x65","\x65","\x65",
	"\x69","\x69","\x64","\x64","\x6e","\x6e","\x6f","\x6f","\x6f","\x6f","\x72",
	"\x75","\x75","\x75","\x75","\x79","\x74",
);
function specialchar_latin2($url) {
//specialchar_latin2 by tosiek https://tosiek.pl/
	global $map_latin2,$map2_latin2;
	$url = str_replace($map_latin2,$map2_latin2,$url);
	$url = preg_replace('#[\W]{1,}#','-',$url);
	$url = trim($url,'-');
	$url = strtolower($url);
	return $url;
}

Życzę miłego tworzenia przyjaznych adresów dla wyszukiwarek i użytkowników (wiesz w co klikasz widząc sam link).

google bug XSS – błąd w google webmaster tools

google bug – błąd w google webmaster tools

Otóż niedawno zwyczajnie przeglądając sobie google dla webmasterów zdziwiłem się jak zobaczyłem ładnie osadzony JavaScript pośród wyników. Może to niewiele ale takie rzeczy są równie bezpieczne jak sranie na odbezpieczony 5 sekundowy granat… Poza tym mając taką wskazówkę bez problemu odnajdziemy więcej podobnych błędów, wiadomo gdzie szukać… jestem wręcz pewien że wszystkie dane są w ten sam sposób parsowane!

Pragnę przypomnieć, że już dawno w google jakiś ktoś odkrył też jakieś luki (chyba także XSS), nie jestem pewnie bo nie było po polsku… Teraz odnalazłem go w : Twoja witryna w sieci >> Zapytania najczęściej powodujące wyszukanie

Miłego XSS-owania!

XSS
cross site scripting, atak na stronę polegający na umieszczeniu własnego kodu na stronie, oczywiście złośliwy w działaniu i szkodliwy (z reguły JavaScript).
Zabezpieczenie przed XSS
Otóż nie ma prostszych sposobów niż parsowanie danych w PHP za pomocą jednej z dwóch funkcji:

  • htmlentities() – zamienia specjalne znaki na encje, dzięki temu możemy wyświetlić bezpiecznie każdy kod i nie zostanie on wykoanany
  • strip_tags() – usuwa każdy kod HTML, osadzony JavaScript oraz PHP, wiec nie zostanie on w ogóle wyświetlony
  • htmlspecialchars() = konwertuje na encje tylko znaki specjalne

Przy htmlentities() oraz htmlspecialchars() pragnę przypomnieć, że jeśli parsujemy jakiś ciąg w utf-8 lub innym kodowaniu to musimy je podać jako trzeci argument funkcji, inaczej znaki specjalne nam się wykrzaczą!

htmlentities($str, ENT_NOQUOTES, 'utf-8');
htmlspecialchars($str, ENT_NOQUOTES, 'utf-8');

Screen buga w google webmaster tools:
google webmaster xss bug screen
Dla tych szukających rozwiązania od strony php polecam dwie funkcje:

  • urlencode()
  • rawurlencode()

Wszelkie prawa zastrzeżone © tosiek

compress JavaScript code – compressor

compress JavaScript code – compressor

Kompresja kodu JavaScript jest gotową funkcją PHP która za pomocą wyrażeń regularnych usuwa zbędne znaki ze skryptu JavaScript co powoduje zmniejszenie jego rozmiaru. Skutkiem tego jest przyspieszona obsługa skryptu (jego wykonanie) jak i szybsze wczytanie pliku se skryptem lub strony z osadzonym skryptem w znacznikach <script></script> co powoduje także zmniejszenie zużycia transferu, który jest wymagany do wysłania nie skompresowanego kodu w pliku do klienta (przeglądarki).

Działanie można przetestować na: Kompresja JavaScript

Aktualnie usuwane lub zamieniane są zbędne rzeczy takie jak

  • Tabulator Pionowy – vertical tab – 0×0B (\x0B)
  • Znak powrotu karetki – 0×0D (\r, \x0D)
  • Tabulatory zmienia na pojedynczą spację – TAB – 0×09 (\t, \x09)
  • Każdą podwójną spację (i więcej np. 3, 4 i tak dalej) zamienia na pojedynczą 0×20 – (\x20)
  • Wszystkie komentarze
  • Pojedyncze spacje tylko w określonych miejscach (określonych w zmiennej $char_js)
  • Ewentualnie przejścia do nowych linii – 0×0A (\n, \x0A)

Domyślnie nie są usuwane spacje powiązane ze zmienną $char_js oraz przejścia do nowych linii!!! Można uzyskać ten efekt przekazując odpowiednie wartości do funkcji.

function compress_javascript($js_code,$special_chars=false,$remove_new_lines=false) {
/*********************
//
//Compress JavaScript by tosiek - https://tosiek.pl/
//
*********************/
//
// Arrays
//
//array with pattern
	$pattern=array(
		//remove carriage return
		"/\x0D/",
		//remove vertical tab
		"/\x0B/",
		//Replace tabulators to one space
		"/\x09{1,}/si",
		//Replace more then one spaces to once
		"/\x20{2,}/",
		//Remove JS comments and HTML
		'/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/','/<!--.*?-->/si',
	);
	if($special_chars==true) {
	//Special JavaScript characters after and before the spaces are removed
		$char_js='(|)|=|;|:|?|\'|"|+|-|\*|\/|%|!|<|>|&|\|[|]|{|}';
		//remove spaces with $char_js, after and before
		$pattern[]="/([{$char_js}]+)\x20/";
		$pattern[]="/\x20([{$char_js}]+)/";
	}
	if($remove_new_lines==true) {
		$pattern[]="/\x0A/";
	}
	//array with replacement
	$replacement=array(
		//remove carriage return
		'',
		//remove vertical tab
		'',
		//Replace tabulators to one space
		"\x20",
		//Replace more then one spaces to once
		"\x20",
		//Remove JS comments and HTML
		'','',
	);
	if($special_chars==true) {
	//remove spaces with $char_js, after and before
		$replacement[]='$1';
		$replacement[]='$1';
	}
	if($remove_new_lines==true) {
		$replacement[]='';
	}
	$start=strlen($js_code);
	//Compress JS with regular expressions
	$replace=preg_replace($pattern,$replacement,$js_code,-1);
	// strlen() after compress
	$final=strlen($replace);
	//counts the difference in characters
	$exhed=$start-$final;
	//counts the difference in percentages
	$compression=round(($exhed)/$start*100,2);
	return $replace."\n//Before compress $start bytes; After compress: $final bytes; $exhed ({$compression}%)";
}

Przykładowe użycie funkcji bez dodatkowych wartości (bez usuwania spacji oraz nowych linii)

<?php
$code='if ( top.location  !=  self.location   )
	{ 
top.location.href =  self.location;
}';
$code = compress_javascript($code);
echo $code;
?>

Wyświetli nam:

if ( top.location != self.location )
 { 
top.location.href = self.location;
}
//Before compress 82 bytes; After compress: 77 bytes; 5 (6.09999999999999964472863%)

Lecz nadal widać zbędne spację więc podajmy funkcji jako drugi argument wartość prawda (true) co spowoduje usunięcie zbędnych spacji przy znakach specjalnych

$code = compress_javascript($code,1);

Da nam efekt:

if(top.location!=self.location)
{
top.location.href=self.location;
}
//Before compress 82 bytes; After compress: 68 bytes; 14 (17.0700000000000002842171%)

Do zupełnej kompresji kodu możemy dodać trzeci argument, który usuwa znaki nowych linii (tylko dla znawców JavaScript)

Usuwanie znaków specjalnych i nowych linii

$code = compress_javascript($code,1,1);

da efekt:

if(top.location!=self.location){top.location.href=self.location;}
//Before compress 82 bytes; After compress: 65 bytes; 17 (20.7300000000000004263256%)

Usuwanie nowych linii, bez usuwania spacji obok znaków specjalnych

$code = compress_javascript($code,0,1);

da efekt:

if ( top.location != self.location ) { top.location.href = self.location;}
//Before compress 82 bytes; After compress: 74 bytes; 8 (9.75999999999999978683718%)

DAYBYDAY – We So Broke!

DAYBYDAY – We So Broke!

Jesteśmy tak spłukaniii… spłukani bardzooo…
Gdybym dostawał pięciocentówkę za każdym razem gdy dostaję pięciocentówkę… Miałbym dwie pięciocentówki!

Tekst

Jo! Jo! Jo!
Podnieś ręce!
To nie będzie kolejny rap o kasie, ekstra laskach i sławie
Podnieś ręce!
Nie ziom!
Nie mamy żadnej kasy stary!
Podnieś ręce!
Reprezentujemy Program Dożywiania Bezdomnych
Mogę rapować, ale nie mogę zaliczyć bo jestem spłukany

Chcesz kupić ten abażur?

Bez kasy, bez dziewczyn, bez łóżka
Jesteśmy wolni od tego wszystkiego

Brak kasy – brak problemów! Bez ściemy!
Nie mam nic poza plastikową plombą
Gdy zaczynałem nie miałem nawet dolara
Co tu dużo gadać?
Zostałem w skarpetkach

Jestem bezdomny laseczko
Jeżeli chcesz możemy zaszaleć
gdy mojej mamy nie będzie w domu
Te grizzly nie są prawdziwe
Nakładam folię aluminiową na zęby
Ta koszulka pochodzi z przeceny

Do wszystkich co nie mają szmalu!
Podnieście ręce!
Jeżeli śpisz na ziemi
Podnieś ręce wysoko!
I poczuj, że możesz dotknąć nieba
Jeżeli nie masz niczego, nie masz nic do ukrycia

Jesteśmy tak spłukaniiii…
…spłukani bardzoooo

Do wszystkich co nie mają szmalu!
Podnieście ręce!
Jeżeli śpisz na ziemi
Podnieś ręce wysoko!
I poczuj, że możesz dotknąć nieba
Jeżeli nie masz niczego, nie masz nic do ukrycia

Jesteśmy tak spłukaniiii…
…spłukani bardzoooo

Ja nigdy nie miałem żadnej kasy
Jem swoje paznokcie gdy jestem głodny
Gdy jestem głodny to właśnie robię
Serio stary mam wszy i pchły

Musze żebrać od ósmej do szóstej
Okulary naprawiam taśmą samoprzylepną
Śpię w pudełku
Nie mam skarpet
Kupowałbym crack, ale mnie nie stać
Odjazdowo!

Zaprosiłem raz bezdomną dziewczynę na randkę
Ale jestem tak spłukany, że musiała płacić rachunek za mnie
Mój ziom śpi nieopodal
Pozwala mi pić swoje siki
Nie smakują dobrze ale mam je za darmo

Do wszystkich co nie mają szmalu!
Podnieście ręce!
Jeżeli śpisz na ziemi
Podnieś ręce wysoko!
I poczuj, że możesz dotknąć nieba
Jeżeli nie masz niczego, nie masz nic do ukrycia

Jesteśmy tak spłukaniiii…
…spłukani bardzoooo
Tak!
Jesteśmy tak spłukaniiii…
…spłukani bardzoooo
Tak!

Gdybym dostawał pięciocentówkę
za każdym razem gdy dostaję pięciocentówkę
Miałbym 2 pięciocentówki

Słuchajcie, bycie spłukanym jest teraz modne
Nikt nie jest bardziej spłukany od nas
Tak! Jesteśmy tak spłukani, że nie stać nas nawet
żeby zapłacić za ten teledysk
A oni jeszcze tego nawet nie wiedzą

Ta stopa naprawdę śmierdzi
Hej stary. Co słychać?

DAYBYDAY – shit

shit, shit, shit
Adobe Flash Player is required to view the video.