Jump to content
  • Search In
    • More options...
    Find results that contain...
    Find results in...

    [SFML] Program z zdalnym hasłem


    Recommended Posts

    • Cała zawartość 2
    • Temat został założony
    • Ostatnia odpowiedź

    Top Posters In This Topic

    Najpopularniejsze posty

    Siema. Ostatnio więcej siedzę w C++ niż w AMXX'ie, więc postaram się trochę uzupełnić ten dział. Dzisiaj pokaże przykład kodu napisanego za pomocą biblioteki SFML, służący do weryfikacji hasła, które

    Siema. Ostatnio więcej siedzę w C++ niż w AMXX'ie, więc postaram się trochę uzupełnić ten dział.

    Dzisiaj pokaże przykład kodu napisanego za pomocą biblioteki SFML, służący do weryfikacji hasła, które możemy sobie zdalnie zmieniać na serwerze, bez konieczności wysyłania nowych wersji programu.

    Przydatne np. gdy program trafi w niepowołane ręce i chcemy uniemożliwić im dalszego korzystania z niego.

    W przypadku, gdy hasło byłoby zapisane w zmiennej nie moglibyśmy już nic zrobić :(

    Ostatnia uwaga to taka, że biblioteka SFML ogólnie powstała do tworzenia gier 2D. Jednakże posiada moduł do programowania sieciowego, w skład którego wchodzi m.in obsługa socketów oraz elementy obsługi protokołów FTP i HTTP. My użyjemy tą ostatnią opcję. Jeśli potrzebujesz bardziej wyspecjalizowanych narzędzi, to należy użyć bibliotek stworzonych do tego celu.

     

    Potrzebujemy :

    - Serwer WWW z PHP (stronę, może być darmowa; ważne żeby działała 24/7)

    - Biblioteki SFML http://www.sfml-dev.org/

    - Kompilator C++ (najlepiej zgodny z standardem C++11)

    - Sprawne łącze internetowe

     

    Potrzebna wiedza do ogarnięcia :

    - Protokół HTTP (budowa linku, różnice między POST i GET)

    - Podstawy C++

    - Odczyt danych przekazanych przez HTTP w PHP

    #include <iostream>
    #include <string>
    #include <SFML/Network.hpp>
    
    bool weryfikacja_http()
    {
        std::cout<<"Podaj haslo"<<endl;
        string haslo;
        std::cin>>haslo;
        string haslo2 = "password=";
        haslo2+=haslo;
        sf::Http::Request request("/sciezka_do_skryptu/csk_skrypt.php",sf::Http::Request::Post); // ustaw ścieżkę i sposób przekazania danych w obiekcie klasy Request
        request.setBody(haslo2); // ustaw zmienne w linku, nie musimy dopisywać znaku zapytania na samym początku
    
        sf::Http http("http://www.cskatowice.com/"); // adres naszej strony
        sf::Http::Response response = http.sendRequest(request); // "poproś" o odpowiedź wysyłając prośbę za pomocy obiektu Request, odpowiedź to cała zawartość strony w formie kodu HTML
        string content = "";
        content = response.getBody(); // odczytaj odpowiedź z serwera
        if (content == "1") return true; // w naszym przypadku skrypt nie będzie pokazywał jawnie hasła tylko odpowiadał czy jest poprawne, jedynka oznacza powodzenie
        return false;
    }
    
    int main()
    {
        while (weryfikacja_http()) // przejdź dalej gdy hasło będzie poprawne, powtarzaj weryfikację gdy hasło jest złe
        {
            // zacznij właściwą prace programu
        }
    }
    

    Natomiast na stronie umieszczamy taki skrypt : (w podanej wcześniej lokalizacji)

    <?php
    
    $haslo_do_programu = "supertrudnehaslo123"; // nasze hasło do programu, zmienne PHP nie są jawne więc możemy bezpiecznie tu trzymać hasło
    $pobranehaslo = $_POST['password']; // pobieramy przekazane hasło przez protokół
    if ($pobranehaslo == $haslo_do_programu) echo "1"; // wyświetlamy jedynkę w przypadku powodzenia
    else echo "0"; // złe hasło, odpowiadamy fałszem
    
    ?>
    

    Oczywiście zawsze ktoś może nam się włamać na serwer i hasło ma na dłoni, jednak to już skrajna sytuacja.

    Myślę, że wszystko wyjaśniłem w komentarzach. Do tej biblioteki akurat jest dobra dokumentacja oraz dużo tutoriali, więc śmiało znajdziecie dodatkowe informacje.

    Wydaje mi się, że to bardziej optymalny sposób niż weryfikacja przez sockety. Choć być może mniej bezpieczny.

    Język C++ daje bardzo dużo możliwości i ma sporo bibliotek, za pewne są lepsze rozwiązania tego problemu jednakże ja proponuje takie :)

    Feel free to use it, by Ogen Dogen.

    Link to comment
    Share on other sites

    Guest
    This topic is now closed to further replies.
     Share

    ×
    ×
    • Create New...