{"id":89,"date":"2007-03-25T01:06:22","date_gmt":"2007-03-25T00:06:22","guid":{"rendered":"http:\/\/eriz.pc-inside.org\/weblog\/zabezpieczanie-skryptowserwera-89.html"},"modified":"2007-03-25T12:57:41","modified_gmt":"2007-03-25T11:57:41","slug":"zabezpieczanie-skryptowserwera","status":"publish","type":"post","link":"https:\/\/eriz.pcinside.pl\/weblog\/zabezpieczanie-skryptowserwera-89.html","title":{"rendered":"Zabezpieczanie skrypt\u00f3w\/serwera"},"content":{"rendered":"<p>Pozwoli\u0142em sobie rozpocz\u0105\u0107 pewien cykl nt. r\u00f3\u017cnych problem\u00f3w, na kt\u00f3re mog\u0105 si\u0119 natkn\u0105\u0107 u\u017cytkownicy Apache&#8217;a (i to niekoniecznie administratorzy). Tym razem skupi\u0119 si\u0119 na podstawowym zabezpieczaniu stron serwowanych przez Indianina.<\/p>\n<p>\nZwi\u0119kszanie poziomu bezpiecze\u0144stwa stron mo\u017cna podzieli\u0107 w zasadzie na kilka cz\u0119\u015bci. Wszak nie jest to tylko zadanie administratora naszego serwera, lecz r\u00f3wnie\u017c nasze, os\u00f3b tworz\u0105cych aplikacje &#8222;webowe&#8221;. Nie chodzi tylko o zapobie\u017cenie destabilizacji dzia\u0142ania serwisu, lecz r\u00f3wnie\u017c o ochron\u0119 danych naszych go\u015bci, co nakazuje nam ustawa o ochronie danych osobowych.\n<\/p>\n<p><!--more--><\/p>\n<p>Zaczniemy od samej konfiguracji serwera. W zale\u017cno\u015bci od tego, czy jeste\u015bmy administratorami serwera czy te\u017c tylko u\u017cytkownikami b\u0119dziemy mogli dokona\u0107 wi\u0119kszych b\u0105d\u017a mniejszych zmian.<\/p>\n<h3>Czy koniecznie Apache?<\/h3>\n<p>Tytu\u0142 troch\u0119 paradoksalny, ale&#8230; Wbrew pozorom, Apache nie jest jedynym serwerem. Dost\u0119pnych jest wiele innych program\u00f3w s\u0142u\u017c\u0105cych do serwowania stron. Dosy\u0107 pr\u0119\u017cnie rozwijaj\u0105c\u0105 si\u0119 alternatyw\u0105 jest <a href=\"http:\/\/lighttpd.net\/\">LightTPD<\/a>. Jest du\u017co szybszy ni\u017c Indianin (zw\u0142aszcza w przypadku generowania stron przez PHP) i na razie, nie wykryto w nim wielu dziur. Jednak posiada on kilka wad; najwi\u0119ksz\u0105 chyba jest brak obs\u0142ugi plik\u00f3w <abbr title=\"Pliki umo\u017cliwiaj\u0105ce dynamiczn\u0105 zmian\u0119 ustawie\u0144 serwera\">.htaccess<\/abbr>.<\/p>\n<h3>Serwer<\/h3>\n<p><strong>Zacznijmy od modu\u0142\u00f3w<\/strong>. Po domy\u015blnej instalacji serwera \u0142adowanych jest wiele modu\u0142\u00f3w, nie zawsze potrzebnych. Pami\u0119taj: <strong>KA\u017bDY ZA\u0141ADOWANY MODU\u0141, TO POTENCJALNE RYZYKO OTWARCIA KOLEJNEJ DZIURY W ZABEZPIECZENIACH SERWERA<\/strong>, wi\u0119c korzystajmy tylko z tych, kt\u00f3re s\u0105 nam naprawd\u0119 potrzebne.<\/p>\n<p>Nale\u017cy r\u00f3wnie\u017c pami\u0119ta\u0107 o <strong>uruchamianiu us\u0142ugi serwera na specjalnym, ograniczonym koncie<\/strong> z odpowiednio ustawionymi uprawnieniami. Absolutnie <strong>NIEDOPUSZCZALNE<\/strong> jest uruchamianie demona serwera na koncie roota\/z uprawnieniami administracyjnymi! Otwiera to drog\u0119 do przej\u0119cia kontroli nad systemem za po\u015brednictwem procesu serwera w przypadku wykorzystania luki. IMHO, najlepszym wyj\u015bciem jest skorzystanie z modu\u0142u <a href=\"http:\/\/www.suphp.org\/\">suPHP<\/a>.<\/p>\n<p><strong>Proces serwera<\/strong> musi mie\u0107 r\u00f3wnie\u017c na\u0142o\u017cone ograniczenia na poziomie systemu plik\u00f3w. Umo\u017cliwiamy mu dost\u0119p <strong>TYLKO<\/strong> do plik\u00f3w, na kt\u00f3rych mo\u017ce operowa\u0107. W systemach Uniksowych nie stanowi to wi\u0119kszego problemu, poniewa\u017c od pocz\u0105tk\u00f3w ich istnienia du\u017cy nacisk k\u0142adzie si\u0119 na zabezpieczenia na poziomie systemu plik\u00f3w i samego systemu. W systemach Windows jest ju\u017c du\u017co gorzej (swoj\u0105 drog\u0105, stawianie serwera na Oknach uwa\u017cam za co najmniej poroniony pomys\u0142). Jednak, je\u015bli kto\u015b si\u0119 upiera, to niech przynajmniej sformatuje partycj\u0119 z danymi serwera pod NTFS i niech to nie b\u0119dzie domy\u015blny katalog (C:\\program files\\apache group\\apache2.2\\htdocs).<\/p>\n<p><strong>Interpretery j\u0119zyk\u00f3w skryptowych<\/strong> r\u00f3wnie\u017c powinny mie\u0107 na\u0142o\u017cone ograniczenia, np. zablokowane wykonywanie polece\u0144 systemowych czy te\u017c limity wykorzystywanej pami\u0119ci. Limitowanie czasu wykonywania skryptu nie jest ju\u017c tak bardzo priorytetowe, ale je\u015bli mamy wyj\u0105tkowo chamskich u\u017cytkownik\u00f3w, kt\u00f3rzy chc\u0105 sprawdzi\u0107 jak zabezpieczony jest serwer b\u0105d\u017a \u017ceruj\u0105 na jego zasobach, to ostatecznie mo\u017cna narzuci\u0107 jaki\u015b limit czasowy. Niekoniecznie dla wszystkich (albo w og\u00f3le: patrz suPHP, wy\u017cej; w\u00f3wczas &#8222;prawomocna&#8221; jest konfiguracja dla konkretnego u\u017cytkownika). Mo\u017cna r\u00f3wnie\u017c precyzowa\u0107 indywidualn\u0105 konfiguracj\u0119 i zmniejszy\u0107 mu dost\u0119pne zasoby pami\u0119ciowo-czasowe nie nara\u017caj\u0105c na utrudnienia innych u\u017cytkownik\u00f3w. Jest to jednak bardzo obszerny temat, zapraszam wi\u0119c do lektury <a href=\"http:\/\/httpd.apache.org\/docs\/\">manuala Apache&#8217;a<\/a>.<\/p>\n<p>W przypadku samych interpreter\u00f3w mamy r\u00f3wnie\u017c do wyboru <strong>dwa tryby pracy<\/strong>: jako modu\u0142 serwera i w trybie CGI. R\u00f3\u017cnice: wydajno\u015b\u0107 i bezpiecze\u0144stwo. O ile w trybie modu\u0142u dokumenty s\u0105 generowane szybciej ni\u017c w przypadku wykorzystywania (Fast)CGI oraz mo\u017cemy skorzysta\u0107 z kilku dodatkowych funkcji, to je\u015bli chodzi o bezpiecze\u0144stwo &#8211; sprawa zmienia si\u0119 dosy\u0107 radykalnie. (Fast)CGI do przeparsowania uruchamia osobny proces, kt\u00f3ry mo\u017cemy z \u0142atwo\u015bci\u0105 zabi\u0107, w przeciwie\u0144stwie do generowania w trybie modu\u0142u \u0142adowanego przez serwer. W\u00f3wczas, spreparowany dokument mo\u017ce spowodowa\u0107 niestabilno\u015b\u0107 serwera\/inne niepo\u017c\u0105dane skutki, co w konsekwencji zmusi do zrestartowania ca\u0142ego demona.<\/p>\n<p><strong>W\u0142\u0105cz logi dla serwera<\/strong> i od czasu do czasu je przegl\u0105daj. Nie do\u015b\u0107, \u017ce pomagaj\u0105 w wykrywaniu usterek, to cz\u0119sto s\u0105 w stanie wykaza\u0107 pr\u00f3by w\u0142am\u00f3w. Chyba nie musz\u0119 wspomina\u0107, \u017ce w przypadku nadu\u017cy\u0107 s\u0105 jednym z g\u0142\u00f3wnych materia\u0142\u00f3w dowodowych.<\/p>\n<p>Trzeba si\u0119 jeszcze odnie\u015b\u0107 do <strong>konfiguracji interpreter\u00f3w<\/strong>. Najwi\u0119cej mam do czynienia z PHP, wi\u0119c do niego si\u0119 ustosunkuje. Co powinni\u015bmy zrobic? Wy\u0142\u0105czy\u0107 <em>register_globals<\/em>. Wiele os\u00f3b zawodowo projektuj\u0105cych aplikacje sieciowe twierdzi, i\u017c jest to bez znaczenia. Owszem. W ich przypadku. Ale zapominaj\u0105 o osobach, kt\u00f3re kupuj\u0105\/za\u0142atwiaj\u0105 sobie konto na serwerze tylko po to, aby odpala\u0107 jakie\u015b proste skrypty. Ci klienci nie maj\u0105 zazwyczaj zielonego poj\u0119cia o np. <a href=\"http:\/\/pl.wikipedia.org\/wiki\/Wzorzec_singletonu\">singletonie<\/a>, a mo\u017ce by\u0107 przyczyn\u0105 problem\u00f3w (z bezpiecze\u0144stwem, rzecz jasna)&#8230;<\/p>\n<p><strong>iptables Twoim przyjacielem.<\/strong> Na \u015awiat otwieraj tylko niezb\u0119dne porty. Np. dost\u0119p do SQL-a niech ma wy\u0142\u0105cznie serwer. Czasem jednak mo\u017ce taka opcja by\u0107 przydatna, ale to tylko przyk\u0142ad. Zezw\u00f3l na dost\u0119p z zewn\u0105trz tylko przez porty 80, 21, itp. PS. <a href=\"http:\/\/pl.wikipedia.org\/wiki\/Ping_Of_Death\">Pingi blokuj<\/a> (nie tylko z powodu PoD, ale r\u00f3wnie\u017c przed <a href=\"http:\/\/pl.wikipedia.org\/wiki\/Ping_flood\">ping-floodem<\/a>). Wr\u0119cz idealny by\u0142by sprz\u0119towy firewall.<\/p>\n<p><strong>Dbaj o najnowsze wersje pakiet\u00f3w.<\/strong> Nic nie jest doskona\u0142e. Szczeg\u00f3lnie to tyczy si\u0119 oprogramowania. Pilnuj, aby paczki by\u0142y w najnowszych dost\u0119pnych wersjach, a je\u015bli to mo\u017cliwe &#8211; w\u0142\u0105cz automatyczne aktualizowanie sk\u0142adnik\u00f3w systemu. Za\u0142atany kernel te\u017c jest wa\u017cny! Je\u015bli system nie b\u0119dzie odpowiednio zabezpieczony, nie ma o czym dalej m\u00f3wi\u0107&#8230;<\/p>\n<p><strong>Staraj si\u0119 by\u0107 na bie\u017c\u0105co z odkrytymi lukami w zabezpieczeniach.<\/strong> Polecam regularnie odwiedza\u0107 serwisy zajmuj\u0105ce si\u0119 bezpiecze\u0144stwem aplikacji, np. <a href=\"http:\/\/secunia.com\/\">Secunia<\/a> lub <a href=\"http:\/\/securityvulns.com\/\">Security Vulnerabilities<\/a>. Plusem tych serwis\u00f3w s\u0105 kana\u0142y RSS, kt\u00f3re pozwol\u0105 na znaczne skr\u00f3cenie ewentualnej reakcji. Pami\u0119taj, \u017ce z tych serwis\u00f3w odwiedzaj\u0105 r\u00f3wnie\u017c w\u0142amywacze, kt\u00f3rzy licz\u0105 na opiesza\u0142o\u015b\u0107 ludzi takich jak Ty &#8211; administrator\u00f3w.<\/p>\n<p><strong>Nie bagatelizuj ryzyka w\u0142amania!<\/strong> Ka\u017cdy serwer, komputer pod\u0142\u0105czony do Internetu, to potencjalny cel hakera\/crackera. Nie ma tu znaczenia, czy jest to wielki klaster sk\u0142adaj\u0105cy si\u0119 z kilkuset serwer\u00f3w czy jeden ma\u0142y &#8222;piecyk&#8221;. B\u0105d\u017a przygotowany na to, \u017ce w ka\u017cdej chwili (nawet teraz) kto\u015b mo\u017ce si\u0119 w\u0142ama\u0107 i wyci\u0105gn\u0105\u0107\/zniszczy\u0107 wszystkie dane.<\/p>\n<p><strong>Dobre has\u0142o, to podstawa.<\/strong> <em>pawe\u0142123<\/em>, <em>dzioenek412<\/em>. Czy Twoje has\u0142a nie s\u0105 podobne? Jak tak, to co\u015b Ci powiem: S\u0104 BEZNADZIEJNE! Ich z\u0142amanie, to tylko kwestia czasu. Kiedy ostatni raz zmienia\u0142e\u015b(a\u015b) swoje has\u0142o? Wczoraj czy p\u00f3\u0142 roku temu? A mo\u017ce wsz\u0119dzie jest ono takie samo? Du\u017ca cz\u0119\u015b\u0107 wtargni\u0119\u0107 do system\u00f3w komputerowych (o ile nie wi\u0119kszo\u015b\u0107) spowodowana jest u\u017cywaniem kiepskich hase\u0142. Jakie powinno by\u0107? Jest wiele recept. Osobi\u015bcie, sugeruj\u0119 d\u0142ugie, losowo wygenerowane has\u0142a, takie jak: <em>oxs*ine!I2oWK2epQ0y+*gso@i)x!:aZeqDE7f@(.Kbr&#038;0Gn[?UM<\/em>. Takie has\u0142o pozwoli nam spa\u0107 odrobin\u0119 spokojniej. Samo has\u0142o jednak nie wystarczy &#8211; wa\u017cna jest r\u00f3wnie\u017c polityka stosowania &#8211; unikaj tego samego ci\u0105gu znak\u00f3w w kilku us\u0142ugach\/kontach oraz regularnie zmieniaj. Sugerowa\u0142bym u\u017cywanie tylko znak\u00f3w, kt\u00f3re da si\u0119 wpisa\u0107 z klawiatury. Owszem, spadnie bezpiecze\u0144stwo. Ale co by po nim by\u0142o, gdyby nie da\u0142o si\u0119 go w og\u00f3le wprowadzi\u0107? (mam tu na my\u015bli kodowanie znak\u00f3w w plikach, itp.).<\/p>\n<p>O blokowaniu funkcji ju\u017c wspomnia\u0142em.<\/p>\n<h3>Co mo\u017ce zrobi\u0107 webmaster?<\/h3>\n<p><strong>Niekt\u00f3re pliki nie powinny by\u0107<\/strong> w og\u00f3le widoczne dla w\u015bcibskich u\u017cytkownik\u00f3w. Najprostszy spos\u00f3b, to trzymanie ich poza katalogiem <em>public_html<\/em>. Wtedy tylko \u017ale napisany skrypt b\u0105d\u017a w\u0142amanie na serwer b\u0119dzie stanowi\u0142o problem. <img src=\"https:\/\/eriz.pcinside.pl\/weblog\/wp-includes\/images\/smilies\/e_wink.png\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/p>\n<p>Czasem nie mamy takiej mo\u017cliwo\u015bci, co si\u0119 rzadko zdarza, aczkolwiek nie mo\u017cna tego aspektu pomin\u0105\u0107. Najprostszym wyj\u015bciem jest ustawienie <a href=\"http:\/\/pl.wikipedia.org\/wiki\/Chmod\">CHMOD<\/a>-\u00f3w w taki spos\u00f3b, aby odebra\u0107 dost\u0119p wszystkim pr\u00f3cz w\u0142a\u015bciciela pliku (<em>700<\/em>).<\/p>\n<p>Powy\u017csza metoda ma jednak wad\u0119 &#8211; nie b\u0119dzie mo\u017cliwo\u015bci odczytania takich plik\u00f3w przez serwer czy PHP. Wtedy tworzymy plik <em>.htaccess<\/em>:<\/p>\n<p><code>order deny, allow<br \/>\ndeny from all<\/code><\/p>\n<p>Mo\u017cna r\u00f3wnie\u017c zablokowa\u0107 jedynie mo\u017cliwo\u015b\u0107 wy\u015bwietlenia zawarto\u015bci katalog\u00f3w. Tworzymy <em>.htaccess<\/em>:<\/p>\n<p><code>Options -Indexes<\/code><\/p>\n<p>Umieszczamy go w folderze, w kt\u00f3rym chcemy zablokowa\u0107 listingi. Uwaga: ustawienia dzia\u0142aj\u0105 rekurencyjnie &#8211; wszystkie podkatalogi b\u0119d\u0105 mia\u0142y takie same ustawienia jak nadrz\u0119dny, z plikiem <em>.htaccess<\/em>.<\/p>\n<p><strong>U\u017cytkownik to cracker! Niewa\u017cne, kto nim jest!<\/strong> Tak jak w prowadzeniu samochodu, tu te\u017c ma zastosowanie zasada ograniczonego zaufania: sprawdzaj WSZYSTKO, ale to <strong>WSZYSTKO<\/strong>, co pochodzi od u\u017cytkownika &#8211; &#8222;go\u015b\u0107&#8221; mo\u017ce podmieni\u0107 praktycznie wszystko, co wysy\u0142a do serwera (zapytania, itp.). Uczulam tu na wszelkie parametry przekazywane przez pasek adresu i w formularzach. Zabezpieczaj r\u00f3wnie\u017c swoje skrypty przed kilku (co najmniej) krotnym wykonaniem; czasem jedno &#8222;od\u015bwie\u017c&#8221; go\u015bcia za du\u017co i serwis stoi&#8230;<\/p>\n<p><strong>Dlaczego filtrowanie danych jest takie wa\u017cne?<\/strong> XSS, SQL-Injection &#8211; jak cz\u0119sto o tym s\u0142yszymy&#8230; Przyk\u0142ad:<\/p>\n<p><code>$q = mysql_query('SELECT * FROM users WHERE ID='.$_GET['ID']);<\/code><\/p>\n<p>I co wtedy? No&#8230; niby nic. Tak? To popatrz: wchodzimy sobie na stron\u0119, kt\u00f3ra zawiera taki ci\u0105g w pasku adresu:<\/p>\n<p><code>http:\/\/bleble.pl\/profil?user=1;DROP TABLE users<\/code><\/p>\n<p>I co? Ano zostanie zamienione w to:<\/p>\n<p><code>$q = mysql_query('SELECT * FROM users WHERE ID=1; DROP TABLE users');<\/code><\/p>\n<p>Skutki: jedna tabela w bazie mniej&#8230; Co wystarczy? Pilnowanie, co wpisujemy do tre\u015bci zapyta\u0144. Dla MySQL powsta\u0142a funkcja <a href=\"http:\/\/php.net\/mysql_real_escape_string\">mysql_real_escape_string<\/a>. Na tej stronie manuala PHP znajduje si\u0119 r\u00f3wnie\u017c kilka \u017cyciowych przyk\u0142ad\u00f3w wykorzystania.<\/p>\n<p><strong>Spos\u00f3b wprowadzania danych r\u00f3wnie\u017c ma znaczenie.<\/strong> Cz\u0119sto spotykanym sposobem zestawiania po\u0142\u0105czenia z baz\u0105 jest:<\/p>\n<p><code lang=\"text\">$baza_user = 'user';<br \/>\n$baza_haslo = 'abcdefh123';<br \/>\nmysql_connect('localhost', $baza_user, $baza_haslo);<\/code><\/p>\n<p>OK, niby nie ma nic w tym z\u0142ego, ale <cite>nie wywo\u0142uj wilka z lasu<\/cite>. Zobacz przypadek, je\u015bli dojdzie do ma\u0142ego sabota\u017cu, w kt\u00f3rym kto\u015b dopisze jakiegokolwiek dalszego pliku:<\/p>\n<p><code>if($_GET['demaskuj']){<br \/>\necho 'user bazy: '.$baza_user.' haslo: '.$baza_haslo;<br \/>\n}<\/code><\/p>\n<p>Jak mo\u017cna by temu zaradzi\u0107? Przede wszystkim, nie dopuszcza\u0107. Oraz&#8230;<\/p>\n<p><code>mysql_connect('localhost', 'user', 'abcdefh123');<\/code><\/p>\n<p>Istniej\u0105 wtedy trzy, cztery mo\u017cliwo\u015bci przechwycenia<\/p>\n<ol>\n<li>Wprowadzenie do systemu serwera jakiego\u015b exploita umo\u017cliwiaj\u0105cego dowolne hasanie po pami\u0119ci.<\/li>\n<li>Ingerencja w sam kod parsera.<\/li>\n<li>Podejrzenie pliku odpowiedzialnego za zestawianie po\u0142\u0105czenia.<\/li>\n<li>(Nie)\u015bwiadome wypisanie danych na stronie przez samego autora serwisu <img src=\"https:\/\/eriz.pcinside.pl\/weblog\/wp-includes\/images\/smilies\/e_laugh.png\" alt=\":D\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> (paradoksalnie, ca\u0142kiem prawdopodobna opcja).<\/li>\n<\/ol>\n<p><strong>Zmie\u0144 folder, w kt\u00f3rym przechowywane s\u0105 pliki z danymi sesji<\/strong>. Domy\u015blnie, jest to systemowy folder tymczasowy (<em>\/tmp<\/em>, itp.). U\u017cyj <a href=\"http:\/\/php.net\/ini_set\">ini_set<\/a> i zmie\u0144 warto\u015b\u0107 <em>session.save_path<\/em>. Ka\u017cdy u\u017cytkownik serwera ma dost\u0119p do tego katalogu, co mo\u017ce spowodowa\u0107 op\u0142akane skutki (chocia\u017cby pobranie listy plik\u00f3w &#8211; odkrycie identyfikatora sesji).<\/p>\n<p><strong>Par\u0119 razy przewin\u0105\u0142 si\u0119 problem podejrzenia plik\u00f3w.<\/strong> Mo\u017cna zakodowa\u0107 pliki z kodem \u017ar\u00f3d\u0142owym. S\u0142u\u017cy do tego np. <a href=\"http:\/\/www.ioncube.com\/sa_encoder.php\">ionCube Encoder<\/a> czy <a href=\"http:\/\/www.zend.com\/products\/zend_guard\">Zend Encoder (Zend Guard)<\/a>. Zamieniaj\u0105 one kod \u017ar\u00f3d\u0142owy na posta\u0107 zupe\u0142nie nie czyteln\u0105 nawet dla guru-programist\u00f3w. Niestety, z tego co mi wiadomo, to prekompilacj\u0119 umo\u017cliwiaj\u0105 wy\u0142\u0105cznie pakiety komercyjne. By\u0142oby mi\u0142o, gdyby kto\u015b, kto zna jaki\u015b darmowy odpowiednik, poda\u0142 jego nazw\u0119. <img src=\"https:\/\/eriz.pcinside.pl\/weblog\/wp-includes\/images\/smilies\/e_smile.png\" alt=\":)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/p>\n<p>Oczywi\u015bcie, podzia\u0142, kt\u00f3ry zastosowa\u0142em mia\u0142 na celu wy\u0142\u0105cznie pogrupowanie danych podkategorii. Nie oznacza to, i\u017c nie zachodzi korelacja pomi\u0119dzy zastosowaniami\/problematyk\u0105.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pozwoli\u0142em sobie rozpocz\u0105\u0107 pewien cykl nt. r\u00f3\u017cnych problem\u00f3w, na kt\u00f3re mog\u0105 si\u0119 natkn\u0105\u0107 u\u017cytkownicy Apache&#8217;a (i to niekoniecznie administratorzy). Tym razem skupi\u0119 si\u0119 na podstawowym zabezpieczaniu stron serwowanych przez Indianina. Zwi\u0119kszanie poziomu bezpiecze\u0144stwa stron mo\u017cna podzieli\u0107 w zasadzie na kilka cz\u0119\u015bci. Wszak nie jest to tylko zadanie administratora naszego serwera, lecz r\u00f3wnie\u017c nasze, os\u00f3b tworz\u0105cych [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,12],"tags":[37,30],"_links":{"self":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts\/89"}],"collection":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/comments?post=89"}],"version-history":[{"count":0,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts\/89\/revisions"}],"wp:attachment":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/media?parent=89"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/categories?post=89"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/tags?post=89"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}