Skocz do zawartości

    Zamknięty [SFML] Program z zdalnym hasłem


    Ogen Dogen
     Udostępnij

    Rekomendowane odpowiedzi

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

    Top użytkownicy w tym temacie

    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.

    Odnośnik do komentarza
    Udostępnij na innych stronach

    Hej! Nie widzisz zawartości tego postu?
    Zaloguj się lub Zarejestruj nowe konto, aby korzystać ze wszystkich dostępnych funkcji!
    Odnośnik do komentarza
    Udostępnij na innych stronach

    Gość
    Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
     Udostępnij

    ×
    ×
    • Dodaj nową pozycję...
    Przeglądasz forum jako gość.
    Nie posiadasz dostępu do niektórych treści i funkcji!