Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

Problem z usunięciem backslaha


producer

Pytanie

Opublikowano

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

 

 

6 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano

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.

Opublikowano
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

 

 

Opublikowano

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

Opublikowano

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

Opublikowano

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.

Potrzebujesz pomocy z hostingiem? Daj znać poprzez Telegram lub Priv!

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...