Ogen Dogen 2 658 Właściciel Posted July 20, 2015 Właściciel Share Posted July 20, 2015 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 More sharing options...
alniherovy. 114 Posted July 21, 2015 Share Posted July 21, 2015 Hej! Nie widzisz zawartości tego postu? Sign In lub Create an account, aby korzystać ze wszystkich dostępnych funkcji! Link to comment Share on other sites More sharing options...
Recommended Posts