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 (1 - 4)
Kicok
post
Post #2





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

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


Cytat
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.

Według ciebie to źle, że ich nie widać? Jeśli tak, to poczytaj podczepiony temat o SQL Injection, żeby się dowiedzieć co to w ogóle jest i na jakiej zasadzie działa. Bo z tego co widzę to na razie wiesz tylko, że "trzeba używać addslashes() żeby było bezpieczniej" ;]


Cytat
Jezeli w bazie tak to wyglada to czy po wyciagnieciu danych musze opuszczac slashe?

nie

Ten post edytował Kicok 26.02.2007, 17:04:27


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
no_face
post
Post #3





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

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


Nie przesadzajmy. Temat wskazany przez Ciebie juz jakis czas temu czytalem. Wydaje mi sie ze odpowiedzi na dokladnie te pytanie tam nie widzialem. Chodzi mi tylko o ten maly mankament. Jak to wyglada, pomijajac pewne wiadome:

$wejscie = addslashes(post);
echo $wejscie; //widac znaki unikowe
query(dodaje do bazy $wejscie);

w tej chwili jak zajrze bezposrednio do bazy to owych znakow nie widac (/). Chodzi mi tylko o to czy w tym konkretnym przypadku jest cos nie tak, czy wrecz przeciwnie, nie musze sie bac takiego zachowania.

Cytat
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
Kicok
post
Post #4





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


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
no_face
post
Post #5





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

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


Dzieki, wlasnie takiej odpowiedzi szukalem.

A drgie pytanko, moge liczyc na opowiedz?
Cytat
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

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

 



RSS Aktualny czas: 22.08.2025 - 10:56