Skocz do zawartości
producer

Problem z usunięciem backslaha

Polecane posty

Witam witam, ostatnio męczyłem się z wszystkimi znakami a teraz przyszła pora na jeden konkretny.

Do systemu logowania podczas pobierania hasła z formularza zastosowałem

htmlspecialchars($_POST['password']);

Wszystko było by świetnie, lecz fakt że \ (backslash) potrafi wysypać mi stronę. Po wpisaniu ukośnika w pole hasło wyświetla się taki błąd " blad zapytania You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '"\")' at line 1 " Wygląda na to że owy backslash przerywa polecenie, czy znacie jakąś funkcję lub możliwość naprawienia tego błędu? Mogę użyć str_replace() lecz ta funkcja całkowicie usunie użytkownikowi nawet możliwość zakładania konta z hasłem w którym będzie właśnie owy ukośnik, a chyba nie o to chodzi, wolałbym jednak aby użytkownik miał możliwość korzystania z slasha tak jak na innych stronach. 

 

Zamieszczę wycinki z kodu odpowiadającego za logowanie

Spoiler
if(isset($_POST['password'])){
		$password = htmlspecialchars($_POST['password']);
	}
if(!$connect){
		echo "Błąd połączenia z bazą danych";
	} else { 
			$zapytanie0 = 'select * from user where login = "'.$login.'" AND password = SHA1("'.$password.'")';
			$wynik0 = mysqli_query($connect,$zapytanie0);
			$wiersz0 = mysqli_fetch_array($wynik0);

$zapytanie = 'select * from user where login = "'.$login.'" AND password = SHA1("'.$password.'")';
			$wynik = mysqli_query($connect,$zapytanie);

if(!$wynik) {
					echo "blad zapytania ".mysqli_error($connect);
} else {
 // Tutaj mam polecenia co ma otworzyć gdy poda dobre dane logowania //

 

Z góry bardzo dziękuje wszystkim za pomoc

Udostępnij ten post


Link to postu
Pani Kasia

Proste rozwiązania są najskuteczniejsze

htmlspecialchars(str_replace('\\','\\\\',$_POST['password']))

Powinno działać, nie analizowałem w ogóle kodu może gdzieś jeszcze coś do poprawy.

(podwójny "\\" jest dlatego, że sam znak "\" jest specjalny i trzeba go tak jakby anulować)

 

Ogólnie są jakieś funkcje i zasady, którymi należy się kierować, ale kiedyś sam się wszystkiego nauczysz ;)

 

 

PS: poczytaj sobie o hashowaniu haseł, wpisz w google np "php password hash" - chodzi o szyfrowanie haseł w bazie danych tak aby praktycznie niemożliwym było ich rozszyfrowanie.

Edytowano przez Latreso
Poprawka kodu

Udostępnij ten post


Link to postu
25 minut temu, Latreso napisał:

Proste rozwiązania są najskuteczniejsze

htmlspecialchars(str_replace('\\','\\\\',$_POST['password']))

Powinno działać, nie analizowałem w ogóle kodu może gdzieś jeszcze coś do poprawy.

(podwójny "\\" jest dlatego, że sam znak "\" jest specjalny i trzeba go tak jakby anulować)

 

Ogólnie są jakieś funkcje i zasady, którymi należy się kierować, ale kiedyś sam się wszystkiego nauczysz ;)

 

 

PS: poczytaj sobie o hashowaniu haseł, wpisz w google np "php password hash" - chodzi o szyfrowanie haseł w bazie danych tak aby praktycznie niemożliwym było ich rozszyfrowanie.

Dziękuje za pomoc, hah używam sha1, ale miałem dylemat nad md5

Udostępnij ten post


Link to postu

zignoruj powyzsze rady i zainteresuj sie prepared statements

 

a na upartego nie wykonuj takich kombinacji, po prostu zahashuj ciag znakow przed konkatenacja

 

I nie uzywaj zadnych funkcji konwertujacych przy haslach (html_special_chars)

 

btw hashowanie i szyfrowanie to dwie rozne rzeczy

Edytowano przez Nagasheek

Udostępnij ten post


Link to postu

Ogólnie to tak:

hashowanie, nie szyfrowanie - i wtedy nie używaj żadnych "htmlspecialchars" "str_replace" itp.

Do hashownia tak jak kolega wyżej napisał:

- funkcja hashująca https://secure.php.net/manual/pl/function.password-hash.php

- funkcja sprawdzająca https://secure.php.net/manual/pl/function.password-verify.php

 

 

A jeżeli chcesz wstawić rekordy do bazy to używaj tych funkcji:

htmlspecialchars( addslashes( $variable ) );

Wtedy A: pozbędziesz się tagów html, B: zneutralizujesz wszystkie znaki specjalne typu "\", "&" itp

Udostępnij ten post


Link to postu

Po pierwsze - do bazy się łącz przez PDO i tam przygotowuj zapytania.

Po drugie - hasła hashowane. Koledzy już dali sporo informacji, nie dodam cegiełki, poza dodanie soli do tego. Salt+Hash to podstawa.

Po trzecie - htmlspecialchars - pomoże Ci w walce z XSS (nie pomoże, ale zmniejszy szanse minimalnie), ale nie nadaje się do pracy z hasłem.

Udostępnij ten post


Link to postu

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.


×