Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MSSQL]Czy da się usunąć dowolną tabelę lub całą bazę dancych?
-Czy d-
post
Post #1





Goście







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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


Może usunąć całość w zależności od praw użytkownika. Dlaczego dajesz tag mssql a piszesz o mysql?
Go to the top of the page
+Quote Post
-Gość-
post
Post #3





Goście







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.
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #4





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Zabezpiecz swój system newsów przed SQL Injection.
Go to the top of the page
+Quote Post
-Gość-
post
Post #5





Goście







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?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 to the top of the page
+Quote Post
-Gość-
post
Post #7





Goście







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?
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie, jak źle użyjesz to nie zabezpieczy. Tak samo jak źle użyjesz pistolet to zabije Ciebie zamiast napastnika (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
eviance
post
Post #9





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 18.03.2011
Skąd: R do M / Sanniki

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


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 to the top of the page
+Quote Post
-Gość-
post
Post #10





Goście







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 (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Oj nie załapałeś aluzji o wróżkach.... Dobrze, napiszę wprost: podaj kod. Wróżek nie ma (IMG:style_emoticons/default/smile.gif)
Jak pokażesz jak używasz PDO to ci powiemy czy dobrze czy nie (IMG:style_emoticons/default/smile.gif)

No ale ogólnie chodzi o bindowanie zmiennych, które to dopiero zabezpiecza przed sqlinjection
Go to the top of the page
+Quote Post
-Gość-
post
Post #12





Goście







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();
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 the top of the page
+Quote Post
-Gość-
post
Post #14





Goście







To już ja ustalam (IMG:style_emoticons/default/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));
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #15





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(Gość @ 27.11.2012, 15:36:32 ) *
To już ja ustalam (IMG:style_emoticons/default/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ć?
Go to the top of the page
+Quote Post
d3ut3r
post
Post #16





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


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ć.
Go to the top of the page
+Quote Post
--Bonek--
post
Post #17





Goście







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?
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: 25.08.2025 - 20:55