rzientek

Reputacja

4,352

Głosów ogółem

użytkownik głosował za tyle razy
360
Użytkownik głosował przeciw tyle razy
32
  • Sławne pytanie
  • Roczniak
  • Wybitne pytanie
  • Niezła odpowiedź
  • Super redaktor
  • Popularne pytanie
  • Komentator
  • Student
  • Nauczyciel
  • Autobiograf
  • Organizator
  • Patrol obywatelski
  • Cofnął głos
  • Krytyk
  • Wsparcie
  • Uczony
  • Redaktor
Prawdziwe imię
Rafał
Członek od
2 lata, 5 miesięcy
Ostatnio widziany
6 miesięcy, 3 tygodnie temu
Witryna
http://getsimpl...
Miejscowość
Radzionków
Wiek
26

O mnie

pracuję jako grafik/webdesigner, jestem również programistą jak i interesuje się tematyką SEO i SEM. Prywatnie lubię dobry film, książkę i muzykę. Żonaty.

Pytania: 65

Odpowiedzi: 193

  • 2010-02-21 19:18:44 Zabezpieczanie aplikacji internetowych

    Tak w skrócie najbardziej jak się da możemy sobie podzielić typy ataków na:

    1. Code Injection polega na wstrzykiwaniu złośliwego kodu do niezabezpieczonej strony, osoba atakująca może np. modyfikować bazę i w tym wypadku mamy do czynienia z SQL Injection. Można się zabezpieczyć poprzez stosowanie w php strip_tags - usuwa znaczniki PHP i HTML z danego ciągu, addslashes - dodaje znak \ przed znaki takie jak: ”, ’,\ i NULL, które mogą być użyte w niecnych celach, preg_match sprawdza zadany łańcuch pod względem zgodności z podanym wyrażeniem regularnym, htmlspecialchars - konwertuje znaki specjalne na znaczniki HTML np. & na &amp. Do tego typu ataków należą również ASP Injection, PHP Injection, Shell Injection, HTML/Script Injection.
    2. XSS (Cross-site scripting) opisane przez przedmówcę - zabezpieczenie poprzez filtrowanie treści i przekazywanych zmiennych np za pomocą wyżej wymienionej funkcji strip_tags, stosowanie sesji do uwierzytelnienia użytkownika zamiast plików cookie i kilka innych ważnych spraw, o których można poczytać w internecie bo jest tego dość dużo.
    3. Path Traversal jest to atak polegający na dostaniu się do pliku lub katalogu na serwerze teoretycznie niedostępnego. Wszystkie udostępniane pliki powinny znaleźć się poniżej katalogu ze stroną (przeważnie jest to katalog public_html lub www). Od strony kodu wprowadzić kontrolę nad wprowadzaną treścią tak jak w przypadku Code Injection np. poprzez funkcję preg_match. Jeszcze do tego przydatny artykuł nawet z przykładami stron podatnych na ten atak.
    4. CSRF (Cross-Site Request Forgery) - nieświadome zmuszeniu użytkownika do wykonania jakieś określonej akcji w trakcie trwania uwierzytelnionej sesji. Obronnie można stosować systemy dodatkowej autoryzacji, można również dodać do formularza ukryte dodatkowe pole, zawierającego indywidualny identyfikator wykonywanej operacji.
    5. SQL Injection z punktu 1 jest tak szeroko opisywany, że zbędny jest tutaj komentarz. Najpopularniejszą metodą jest używanie funkcji mysql_real_escape_string a resztę można doczytać w internecie. Więcej też w manualu z php.
    6. Session Poisoning i Session Hijacking czyli przechwytywanie sesji, na 9fingers już o tym było. Obronnie nie należy przesyłać identyfikatora sesji jako URL, warto stosować własne mechanizmy obsługi sesji i ogólnie do wszystkich trzymać się zasad bezpiecznego programowania i myśleć o zabezpieczeniu serwisu w trakcie jego budowy.

    W PHP do filtrowania danych służą funkcje, których opis można znaleźć w manualu.

    Oczywiście dodam, że stosowanie trudnych haseł dostępu do strony, ftp itd. powinny być standardową procedurą. Dodatkowe zabezpieczenia typu SSL też się przydadzą.

    To chyba najpopularniejsze typy ataków jakie mi przychodzą do głowy.

  • 2010-02-23 15:50:23 DIV na środek. [zamknięte]

    na środek strony to ustawiasz

    #main {
      margin: auto;
    }
    

  • 2010-02-26 18:37:11 Import kodu w Java Script. [zamknięte]

    W/g standardu XHTML 1.1

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="pisz.js" /></script>
    <title>Pisz</title>
    </head>
    <body>
    <script type="text/javascript">
    pisz();
    </script>
    </body>
    </html>
    

  • 2010-01-07 15:32:49 Źródło darmowych tekstur\dźwięków do umieszczenia w projekcie. [zamknięte]

    Ja ściągam z tej strony. Dźwięki są na licencji Royalty Free i można je legalnie wykorzystać do swoich multimedialnych projektów. Na tej samej licencji są tekstury na www.textureking.com i www.texturespot.com.

  • 2010-01-08 12:41:07 Przycisk submit jako obrazek

    albo w css np:

    #button {
        background-image: url(background.jpg);
        height: 30px;
        width: 150px;
        border: 0;
    }
    
    <input type="submit" name="button" id="button" value="Submit" />
    

  • 2010-02-10 18:04:54 [FLASH] Wstawianie obrazka do animacji

    Mam na to dość prosty sposób flash+AS3+XML (robione pod flashem CS4). Tworzysz sobie dokument przykładowo herby.as z kodem:

    package {
    // ładujemy biblioteki
    import flash.net.*;
    import flash.display.*;
    import flash.events.*;
    import flash.text.TextField;
    public class herby extends Sprite {public var loader:URLLoader;
    public function herby() {
    // tworzymy odwołanie do pliku xml
    var link:URLRequest = new URLRequest("herby.xml");
    loader = new URLLoader();
    loader.addEventListener(Event.COMPLETE, loading);
    loader.load(link);
    }
    function loading(evt:Event):void {
    var XMLherby:XML = new XML();
    XMLherby = XML(loader.data);
    trace(XMLherby);
    // tablica pobierająca pliki graficzne i ustawienie ich na scenie
    // [10,100] to odległości od lewej krawędzi i górnej
    var tablica:Array = [[10,100],[10,300]];
    var i:int = 0;
    for each (var herb in XMLherby.children()) {
    var req:URLRequest = new URLRequest(herb.@lokalizacja);
    var img:Loader = new Loader();
    img.load(req);
    img.x = tablica[i][1];
    img.y = tablica[i][0];
    addChild(img);
    var txt:TextField = new TextField();
    // uporządkowanie i wyświetlanie tekstu pod plikami graficznymi
    txt.text = herb.@opis;
    addChild(txt);
    txt.x = tablica[i][2]+5;
    txt.y = tablica[i][0]+150;
    i+=1;
    }
    }
    }
    }
    

    Następnie tworzymy nasz plik herby.xml

    <herby>
        <herb lokalizacja="img/herb1.png" opis="9fingers TEAM"/>
        <herb lokalizacja="img/herb2.png" opis="Wiki TEAM"/>
    </herby>
    

    Tworzymy dokument herby.fla (np 480x200px, 24fps) w panelu Properties(Właściwości) -> Document Class(Klasa Dokumentu) wpisujemy nazwę naszego pliku herby.as ale bez rozszerzenia czyli herby:

    alt text

    Oczywiście w głównym katalogu musi być też folder img z dwoma obrazkami herb1.png i herb2.png taka ścieżka jak w pliku xml. W efekcie uzyskamy taki efekt jak poniżej:

    alt text

    Jeśli chodzi o php to możesz za pomocą DomDocument stworzyć plik xml z linkami. Jest dużo o tym w sieci, więc nie będę się rozpisywał na ten temat bo to już od indywidualnych zapotrzebowań trzeba dostosować.

    Pliki źródłowe z projektu możesz pobrać tutaj. (have fun:)

  • 2010-02-21 20:36:50 SQL injection - bezpieczeństwo

    Przede wszystkim filtrowanie danych wejściowych i stosowanie mysql_real_escape_string. Również wspomniane przez @kilas88 mechanizmy prekompilowanych zapytań z podstawianymi zmiennymi

    1. prepared statements (predefiniowane zapytania, MySQL, MS-SQL, PostgreSQL) więcej informacji
    2. bind variables (zmienne bindowane, Oracle) więcej informacji
    3. stored procedures czyli funkcje definiowane wewnątrz bazy SQL

    Te zabezpieczenia pozwalają na dokładną deklarację typu zmiennej podawanej do zapytania. Dodatkowo prepared statements daje znacznie większą wydajność wykonywania zapytań w większości systemów bazodanowych.

    W ograniczonym stopniu można stosować również settype() do podstawiania zmiennych do SQL'a czyli coś takiego:

    settype($offset, 'integer'); 
    $query = "SELECT id, nazwa FROM produkty ORDER BY nazwa LIMIT 10 OFFSET $offset;";
    

    Dodatkowym zabezpieczeniem może być mod_rewrite poprzez ukrycie oryginalnego adresu URL i zastąpienie go innym, czyli zwykłe (zaczerpnięte gdzieś z internetu):

    RewriteEngine On
    RewriteBase /
    RewriteRule ^produkty,([0-9]+),([0-9]+)\.html$ produkty.php?kategoria=$1&produkt=$2 [L]
    

    Tak jak już ktoś napisał walidować dane wprowadzane przez użytkowników, aby nie można było wpisywać apostrofa i słów które są składnią języka SQL (select, delete itd).

    Można też użyć strip_tags - wycina wszystkie tagi html z tekstu.

    Takie rzeczy jak sprawdzanie siły hasła wprowadzonego przez użytkownika do waszego serwisu oraz nadawanie użytkownikom minimalnych praw w korzystaniu z serwisu i kilka innych dobrych praktyk na pewno zniweluje podatność na ataki SQL Injection. Warto też być na bieżąco z nowymi atakami typu SQL Injection i szybko wprowadzać modyfikacje do swoich serwisów.

  • 2010-02-25 16:34:50 Domena na localhost, czy to możliwe?

    W/g podpowiedzi @nilphilusa działa lokalnie na jednym komputerze ale może się to komuś przyda. Można też zrobić ewentualnie Virtual Host w httpd.conf. Ja mam WAMP'a na przykład ale przy innych np. XAMP'ie jest podobnie.

    Utworzyć folder np. c:\vhost

    Przejść do C:\WINDOWS\system32\drivers\etc\hosts edytować plik hosts w notatniku dodając np.

    127.0.0.2       domena.pl
    

    Odkomentować w pliku httpd.conf ścieżkę:

    # Virtual hosts
    Include conf/extra/httpd-vhosts.conf
    

    Otwieramy plik httpd-vhosts.conf u mnie znajduje się w ścieżce C:\wamp\bin\apache\Apache2.2.11\conf\extra i dodajemy w pierwszą wolną przerwę kod:

    <Directory C:/vhosts>
      Order Deny,Allow
      Allow from all
    </Directory>
    

    pod spodem:

    <VirtualHost 127.0.0.2>
      DocumentRoot c:/vhosts/domena.pl
      ServerName domena.pl
    </VirtualHost>
    

    Resetujemy usługi w moim przypadku wamp'a i już domena.pl działa na lokalu. Oczywiście w katalogu c:/vhosts utworzyłem testowy katalog domena.pl i wrzuciłem jakiś index.html.

  • 2009-12-28 19:12:13 MySQL wyrażenia regularne

    Wyrażenie w MySQL tworzy się przy pomocy polecenia REGEXP:

    SELECT * FROM `baza-mail` WHERE email REGEXP '([abc])';
    

    zapytanie pobiera wszystkie rekordy z pola email, w których występują litery z zakresu a-c czyli a,b,c.

    SELECT * FROM `baza-mail` WHERE email REGEXP '([a-z0-9])';
    

    dla przykładu ten zapis spowoduje wyświetlenie wszystkich rekordów które zawierają litery i liczby z zakresu od a do z i od 0 do 9

    SELECT * FROM `baza-mail` WHERE email NOT REGEXP '@';
    

    powyższy zapis mianowicie jest zaprzeczeniem regexp czyli w tym wypadku przeszukamy wszystkie rekordy, w których nie ma znaku @

    W twoim problemie można przypuszczalnie wykluczyć znaki - i _ ale jeszcze muszę pomyśleć jak całe wyrażenie musiało by wyglądać:)

    SELECT * FROM `baza-mail` WHERE email NOT REGEXP '(-|_)';
    

  • 2009-12-28 22:23:31 Kodowanie strony www - jakie najlepsze? [zamknięte]

    Zdecydowanie utf-8 najbardziej uniwersalny i zawierający znaki z innych języków. Strony pisane głównie w języku polskim spokojnie można kodować iso-8859-2. Nie polecam natomiast kodowania WIN1250 bo.. nie polecam :). Moim zdaniem najlepszy jest utf-8.