Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql] addslashes; nazwy inputow
no_face
post
Post #1





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


Witajcie, chcialbym rozwiazac jeden problem. Dotyczy on dodawania znakow unikowych dla danych w celu ich pozniejszego dodania do bazy. Odbywa sie to w sposob taki, ze w czasie jak wykonam addslashes przy wylaczonym automatycznym dodawaniu i wykonam funkcje echo dla tej zmiennej to widac dodane znaki ucieczki dla niebezpiecznych wpisow. Jednak po dodaniu owej zmiennej do bazy w bazie juz takich znakow nie widac. I tutaj pojawia sie moje pytanie, czy cos robie zle, czy sql robi cos niejawnie. Czy jest to zachowanie, ktorego moglbym sie obawiac. Jezeli w bazie tak to wyglada to czy po wyciagnieciu danych musze opuszczac slashe?


Drugie zapytanie dotyczy nazwy inputow, czy latwo zmienic ich nazwe i wyslac do skryptu. Jesli tak to czy opcja sprawdzania strony z ktorej wystapilo odwolanie bedzie dobrym rozwiazaniem.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Weźmy na przykład takie zapytanie:
  1. <?php
  2. mysql_query("SELECT is_admin FROM tabela WHERE user = '$_POST['user']'");
  3. ?>


Jeśli w formularzu zostanie wpisane "no_face" to zapytanie będzie poprawne:
  1. <?php
  2. SELECT is_admin FROM tabela WHERE user = 'no_face'
  3. ?>


Jeśli w formularzu zostanie wpisane "O'Brian" to zapytanie się posypie:
  1. <?php
  2. SELECT is_admin FROM tabela WHERE user = 'O'Brian'
  3. ?>

Wywali błąd wrong syntax near Brian

Jeśli w formularzu zostanie wpisane "cos' OR is_admin = 1 -- " to zapytanie będzie wyglądało tak:
  1. <?php
  2. SELECT is_admin FROM tabela WHERE user = 'cos' OR is_admin = 1 -- '
  3. ?>

Zapytanie zostanie wykonane, niestety ;]



Natomiast jeśli weźmiemy taki kod:
  1. <?php
  2. $_POST['user'] = addslashes($_POST['user']);
  3. mysql_query("SELECT is_admin FROM tabela WHERE user = '$_POST['user']'");
  4. ?>


To nawet gdy w formularzu zostaną wpisane apostrofy, to zapytanie się nie posypie. Będzie wyglądało tak:
  1. <?php
  2. SELECT is_admin FROM tabela WHERE user = 'no_face'
  3. ?>

tak:
  1. <?php
  2. SELECT is_admin FROM tabela WHERE user = 'O'Brian'
  3. ?>

lub tak:
  1. <?php
  2. SELECT is_admin FROM tabela WHERE user = 'cos' OR is_admin = 1 -- '
  3. ?>


Ukośnik przed apostrofem to TYLKO INFORMACJA dla MySQLa, że nie należy tego apostrofu traktować jako część zapytania SQL (zakończenie danych tekstowych) tylko jako zwykły tekst (i jako zwykły tekst zapisać do bazy danych)

Ten post edytował Kicok 27.02.2007, 14:03:32
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.10.2025 - 03:43