Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] addslashes; nazwy inputow
Forum PHP.pl > Forum > Przedszkole
no_face
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.
Kicok
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
no_face
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?
Kicok
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)
no_face
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.