Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> mysqli_real_escape_string skuteczność?
adamantd
post
Post #1





Grupa: Zarejestrowani
Postów: 228
Pomógł: 7
Dołączył: 15.08.2012
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


Cześć mam pytanie. Na ile skuteczne jest stosowanie mysqli_real_escape_string przed zapisem do bazy wartości tekstowej do pola TEXT lub VARCHAR?
Wszelkie maile lub jakiekolwiek wartości liczbowe czy schematyczne sprawdzam wyrażeniami regularnymi lub jeśli jest możliwość i nie trzeba korzystać z regularnych to na inne sposoby ale są to sposoby dość pewne. Np ma być liczba to sprawdzam czy jest to po prostu liczba. Mam jednak wątpliwości co do bezpieczeństwa zapisywania tekstu. Np komentarze, artykuły, księga wpisów itp gdzie użytkownik nie może mieć zbyt wielu ograniczeń. Używam wtedy najczęściej:

  1.  
  2. $zmienna = mysqli_real_escape_string(uchwyt połączenia, strip_tags(trim($_POST['text'])));
  3.  


I tutaj pytanie czy to wystarczy?
Jeśli nie wystarczy to co można tutaj jeszcze zastosować?

Pozdr.
Go to the top of the page
+Quote Post
sowiq
post
Post #2





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


A wystarczyło zapytać wujka Google. http://stackoverflow.com/a/12118602/1903850
Go to the top of the page
+Quote Post
adamantd
post
Post #3





Grupa: Zarejestrowani
Postów: 228
Pomógł: 7
Dołączył: 15.08.2012
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


Zagmatwane to zwłaszcza po przetłumaczeniu na język polski przez googla.. Popraw mnie jeśli źle zrozumiałem w skrócie, jeżeli zdefiniuję, że ma być utf-8 to jestem bezpieczny?
Po otwarciu połączenia z bazą i tak zawsze ustawiam utf-8
  1. $conn->query("SET CHARACTER SET utf8");
  2. $conn->query("SET collation_connection = utf8_general_ci");
  3.  


nie wiem czy dobrze to zrozumiałem
Go to the top of the page
+Quote Post
sowiq
post
Post #4





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Najważniejsze jest chyba podsumowanie:
Cytat
If you:
- Use Modern Versions of MySQL (late 5.1, all 5.5, 5.6, etc)
OR
- Use mysql_set_charset() / $mysqli->set_charset()
OR
- Use the DSN charset parameter to PDO
OR
- Don't use GBK or BIG-5 (you only use UTF-8 / UCS-2 / Latin-1 / ASCII)

You're 100% safe.
If all of those are false, you're vulnerable even though you're using mysql_real_escape_string()...


W wolnym tłumaczeniu:
Cytat
Jeśli:
- używasz nowych wersji MySQL (późna 5.1, wszystkie 5.5, 5.6 itd)
LUB
- używasz mysql_set_charset() / $mysqli->set_charset()
LUB
- przy użyciu PDO używasz parametru "charset" w DSN
LUB
- nie używasz GBK / BIG-5 (używasz tylko UTF-8 / UCS-2 / Latin-1 / ASCII)

Jesteś w 100% bezpieczny.
Jeśli żaden z powyższych warunków nie jest prawdziwy, jesteś narażony na SQL Injection.
Go to the top of the page
+Quote Post
adamantd
post
Post #5





Grupa: Zarejestrowani
Postów: 228
Pomógł: 7
Dołączył: 15.08.2012
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


właśnie o to mi chodzi -o pkt 2

Cytat
LUB
- używasz mysql_set_charset() / $mysqli->set_charset()


ja ustawiam to za pomocą

  1. $conn->query("SET CHARACTER SET utf8");


teraz pytanie czy jest to to samo co ustawienie kodowania za pomocą metody

  1. $mysqli->set_charset()


bo generalnie przecież i jedno i drugie ma chyba takie samo działanie?
Go to the top of the page
+Quote Post
sowiq
post
Post #6





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


IMO nie ma to większego znaczenia, bo i tak łapiesz się do ostatniego punktu mówiącego o używaniu UTF-8.

[edit]
Według autora wpisu ma to znaczenie.
Cytat
So, I had said at the very beginning that we could have prevented all of this if we used mysql_set_charset('GBK') from the beginning. And that's true.


Ten post edytował sowiq 20.08.2013, 12:16:09
Go to the top of the page
+Quote Post
adamantd
post
Post #7





Grupa: Zarejestrowani
Postów: 228
Pomógł: 7
Dołączył: 15.08.2012
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


w ramach testu zamiast swojego ustawienia utf-8 zastosowałem

  1.  
  2. $conn->set_charset('utf-8');
  3.  



wywaliło mi na stronie krzaki (IMG:style_emoticons/default/smile.gif) w dotychczasowych postach pobranych z bazy danych

po dodaniu nowego wpisu z tym ustawieniem, do bazy zapisuje się z krzakami ale na stronie wyświetla się prawidłowo

-chyba będę musiał pozostać przy swoich ustawieniach

Ten post edytował adamantd 20.08.2013, 12:34:32
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 04:54