Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MSSQL]Czy da się usunąć dowolną tabelę lub całą bazę dancych?
Forum PHP.pl > Forum > Przedszkole
Czy d
Chodzi mi o ochronę przed SQL Injection. Do wszystkich swoich tabel odwołuję się za pomocą PDO, więc te zapytania są odporne na SQL Injection, ale na stronie korzystam też nie z mojego systemu newsów i ten system newsów niestety korzysta z czystego MySQL. Ten system udostępnia np. formularz do szukania w newsach, więc teoretycznie istnieje możliwość wstrzyknięcia czegoś.

Pytanie, czy takie zapytanie wpisane w formularzu wyszukiwarki w newsach może narobić szkód tylko w tabelach, z których korzysta ten system newsów, czy też w dowolnych tabelach (a więc również w moich) w bazie danych? Czy może nawet usunąć całą bazę danych?
viking
Może usunąć całość w zależności od praw użytkownika. Dlaczego dajesz tag mssql a piszesz o mysql?
Gość
Cytat(viking @ 27.11.2012, 12:15:20 ) *
Może usunąć całość w zależności od praw użytkownika.


Czyli co w takiej sytuacji mógłbym zrobić? Przenieść swoje tabele do innej bazy danych (czyli inny login i hasło)?

Cytat(viking @ 27.11.2012, 12:15:20 ) *
Dlaczego dajesz tag mssql a piszesz o mysql?


Moja pomyłka z tym tagiem.
Jeżeli ktoś by mógł, to prosiłbym o poprawienie.
b4rt3kk
Zabezpiecz swój system newsów przed SQL Injection.
Gość
Problem w tym, że to nie jest mój system newsów. Wykorzystuje gotowy skrypt i nie wiem, czy zabezpieczenie tego przed SQL Injection nie byłoby zbyt pracochłonne?
nospor
Cytat
Do wszystkich swoich tabel odwołuję się za pomocą PDO, więc te zapytania są odporne na SQL Injection,
NIekoniecznie. Już byli tu na forum geniusze co używając PDO nadal byli podatni na banalne SQLInjection

Cytat
Wykorzystuje gotowy skrypt i nie wiem, czy zabezpieczenie tego przed SQL Injection nie byłoby zbyt pracochłonne?
My też nie wiemy... nie widzimy kodu... szklane kule padły...

A może się wręsz okazać że wystarczy w trzech miejscach dac mysql_escape_string i po sprawie.
Gość
Cytat(nospor @ 27.11.2012, 13:04:54 ) *
NIekoniecznie. Już byli tu na forum geniusze co używając PDO nadal byli podatni na banalne SQLInjection


Z czego to wynikało? Czy PDO nie powinien zabezpieczać w pełni przed SQL Injection?
nospor
Nie, jak źle użyjesz to nie zabezpieczy. Tak samo jak źle użyjesz pistolet to zabije Ciebie zamiast napastnika wink.gif
eviance
siemka

to mozna zastowować user_prof i o co tu chdzi jako admin masz dostep 1 lub connect by jakiś edytor,

jeden ma full admina drugi do odczytu.


  1. $dbhost = ":/var/lib/mysql/mysql.sock";
  2. if($_SESSION['hsl_write']==1 or $_SESSION['hsl_write']==''){
  3. $dbuname = "mysql";
  4. $dbpass = "***********************************************";
  5. }
  6. else{
  7. $dbuname = "readonly";
  8. $dbpass = "*****************";
  9. }
  10.  
Gość
Cytat(nospor @ 27.11.2012, 13:35:51 ) *
Nie, jak źle użyjesz to nie zabezpieczy. Tak samo jak źle użyjesz pistolet to zabije Ciebie zamiast napastnika wink.gif


Prawda.

A co można zrobić nie tak?
Bardzo mnie to interesuje, bo sam korzystam z PDO, a jestem początkujący i nie wykluczone, że i ja źle jego używam.
nospor
Oj nie załapałeś aluzji o wróżkach.... Dobrze, napiszę wprost: podaj kod. Wróżek nie ma smile.gif
Jak pokażesz jak używasz PDO to ci powiemy czy dobrze czy nie smile.gif

No ale ogólnie chodzi o bindowanie zmiennych, które to dopiero zabezpiecza przed sqlinjection
Gość
Np.

$this->stmt = $this->db->prepare("SELECT * FROM $this->tabela ORDER BY id DESC LIMIT 1");
$this->stmt->execute();
foreach($this->stmt as $row)
{
$this->data = $row["data"];

}
$this->stmt->closeCursor();

.........................

$this->stmt = $this->db->prepare("SELECT * FROM $this->tabela WHERE nr BETWEEN :zakres_od AND :zakres_do");
$this->stmt->execute( array( ':zakres_od' => $zakres_od,
':zakres_do' => $zakres_do));

.........................

$this->rows = $this->db->prepare("SELECT * FROM $this->tabela WHERE id= :id");
$this->rows->execute( array( ':id' => $id));
$this->rows_number = $this->rows->rowCount();
nospor
No i ok, używasz bindowania czyli robisz tak jak należy.

A te: $this->tabela
to skąd się bierze? Ty ustalasz czy może to też użytkownik przesyła na serwer?
Gość
To już ja ustalam smile.gif

A gdyby ustalał użytkowników, to powinno się to również zbindować, tak jak poniżej?

  1. $this->stmt = $this->db->prepare("SELECT * FROM :tabela WHERE nr BETWEEN :zakres_od AND :zakres_do");
  2. $this->stmt->execute( array( ':tabela' => $this->tabela,
  3. ':zakres_od' => $zakres_od,
  4. ':zakres_do' => $zakres_do));
b4rt3kk
Cytat(Gość @ 27.11.2012, 15:36:32 ) *
To już ja ustalam smile.gif

A gdyby ustalał użytkowników, to powinno się to również zbindować, tak jak poniżej?

  1. $this->stmt = $this->db->prepare("SELECT * FROM :tabela WHERE nr BETWEEN :zakres_od AND :zakres_do");
  2. $this->stmt->execute( array( ':tabela' => $this->tabela,
  3. ':zakres_od' => $zakres_od,
  4. ':zakres_do' => $zakres_do));


Od użytkownika w sensie, że może podać nazwę tabeli w inpucie czy też przesłać GET? A po co coś takiego robić?
d3ut3r
W PDO nie można parametryzować nazw kolumn i tabel, jeżeli już sytuacja tego wymaga, to nie wstawiasz do zapytania tego co user wyśle tylko najlepiej zrobić coś takiego:

  1.  
  2. if (isset($_GET['table'])){
  3.  
  4. switch((int)$_GET['table']){
  5.  
  6. case 1:
  7. $table='users';
  8. break;
  9. case 2:
  10. $table='content';
  11. break;
  12. //itd
  13.  
  14. }
  15.  
  16. if(isset($table)){
  17. $sql='SELECT * FROM $table';
  18. } else {
  19. //proba dostepu do niepoprawnej tabeli
  20. }
  21.  
  22. }


w ten sposób użytkownik może wybrać tabelę ale tylko z pośród tych które chcesz mu udostępnić.
-Bonek-
Mam podobną sytuacją - używam skrypt to newsów phpns:
http://sourceforge.net/projects/phpns/

Tyle, że jestem w otyle lepszej sytuacji, że skrypt ten nie udostępnia żadnego formularza (nie ma np. wyszukiwarki), po prostu wyświetla newsy.
Wobec tego, jeżeli nie ma formularzy, to chyba user nie może w żadne sposób wstrzykiwać złośliwego kodu?
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.