Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

22 Stron V  « < 8 9 10 11 12 > »   
Reply to this topicStart new topic
> SQL Injection/Insertion, Jak zapobiec włamaniu na stronę.
.radex
post
Post #181





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


Jakich znowuż scripts embed?
Go to the top of the page
+Quote Post
empuszek
post
Post #182





Grupa: Zarejestrowani
Postów: 62
Pomógł: 2
Dołączył: 29.12.2006
Skąd: Polska, gliwice

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


Cytat(bim2 @ 11.03.2008, 19:09:01 ) *
Czego jeszcze Ci brakuje (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Wystarczy ze w zmiennych który wstrzykujesz w zapytanie "SELECT * FROM lol WHERE if='$id'" dajesz ' lub jeśli to ma być int dajesz (int)$_GET['ehh']; Tyle starcza... :] No i usuwanie wszelkich scripts embed ;P



Nareszcie ktoś to jasno napisał.

PS Co to jest Sript Embed?
Go to the top of the page
+Quote Post
bełdzio
post
Post #183





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


zapewne chodzi o xss (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Xniver
post
Post #184





Grupa: Zarejestrowani
Postów: 108
Pomógł: 26
Dołączył: 29.02.2008

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


Cytat
PS Co to jest Sript Embed?

Chodzi o tagi HTML <script> i <embed>. Wystarczy użycie funkcji strip_tags albo htmlspecialchars
Go to the top of the page
+Quote Post
gandziorz
post
Post #185





Grupa: Zarejestrowani
Postów: 101
Pomógł: 0
Dołączył: 20.12.2006

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


Witam,
Przeczytałem temat przyklejony. I nikt nie sprecyzował jak można się uchronić przed union.
Napisałem taką funkcję:
  1. <?php
  2. function filtr ($zmienna) {
  3. $zmienna = mysql_real_escape_string($zmienna); //zmienia na zmienna z znakami unikowymi
  4. $zmienna = htmlspecialchars($zmienna, ENT_QUOTES); //zmienia znaki html
  5. return $zmienna;
  6. }
  7. ?>

Tylko tak naprawdę nic nie wnosi ciekawego bo owszem zabezpieczy ale jedynie przed prostymi operacjami. Ale co jeśli ktoś użyje union?
Nie poskutkuje bo przecież przy UNION nie trzeba dawać splash'y.

Wiadomo również jak jest przy liczbach można dać INT i dopisać że jeżeli jest odstęp to nie ma tego brać pod uwagę.
np.
  1. <?php
  2. strona.php?id=3 or 1=1
  3. Pobierze wtedy tylko 3.
  4. ?>


Dalej nie wiem co z union?
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #186





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Myślałem że w przyklejonych ma być jakiś porządek, a tu burdel się robi...
Ograniczenie się do mysql, do tego było pisane co z union.

PS
spróbuj ?id=3%20or%20id%3d4 i analogicznie union jak nie sprawdzisz czy id to liczba, a string'a nie dasz w apostrofach.
Go to the top of the page
+Quote Post
marcio
post
Post #187





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Dajesz np na zmienne z get'a prosty str_replace np tak
  1. <?php
  2. $id = $_GET['id'];
  3. $nowy_id = str_replace("union", "", $id);
  4. ?>

Lub dajesz preg_match + system bledow czy cos w tym stylu lub spradzasz czy zmienna id jest liczba
  1. <?php
  2. if(is_integer($_GET['zmienna'])) {
  3. //dzialania jak wszystko ok
  4. }
  5.  
  6. else echo('Blad proba wlamania');
  7. ?>

Co do strongow zastosuj pierwsza metode

Edit sedziwoj szybszy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował marcio 6.04.2008, 22:35:15
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #188





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


@marcio

Do id jako liczby całkowitej dodatniej różnej od zera lepiej użyć kombinacji empty() || ctype_digit() -> niepoprawne id.
Co do string'ów to Twoja metoda jest do niczego, co jakbyś pamiętał już było wspominane w tym temacie, w ciągach zabezpiecza się przed znakami specjalnymi np. używając *_escape_string(), do tego w zapytaniu taki ciąg znaków musi być w znakach oznaczających ciąg znaków, dla MySQL, PostgeSQL itd. jest to najczęściej
  1. 'i to jest ciąg znaków dla bazy'

I jak to użyjesz nie wbiją się za pomocą "SQL Injection", ogólnie dla każdego typu danych sprawdza się czy jest to ten co chcemy, a potem robimy odpowiednie rzeczy z nim (właściwie to chyba tylko ciąg znaków wymaga, ale pewnie coś by się jeszcze znalazło)
Go to the top of the page
+Quote Post
MalyKazio
post
Post #189





Grupa: Zarejestrowani
Postów: 168
Pomógł: 1
Dołączył: 19.11.2005

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


Mam krótkie pytanie. Czy w przypadku używania MySQL lepszym jest używanie mysql_real_escape_string zamiast addslashes? Z tego co się zorientowałem jest to funkcja dedykowana dla tej bazy danych. Czy zatem warto otrzymane zmienne, przy włączonym magic_quotes przefiltrować z powrotem stripslashes i potem przez zapytaniem zastosować mysql_real_escape_string? Czy też jest to zupełnie bez sensu i lepiej zostawić tak jak jest a ewentualne mysql_real.* zostawić na wypadek wyłączonych magic_quotes?
Go to the top of the page
+Quote Post
Crozin
post
Post #190





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Jeśli masz magic_quotes przepuść wszystkie dane (_POST, _GET i _COOKIE) przez stripslashes() a przed dodaniem do bazy użyj mysql_real_escape_string() (ponieważ ona escape'uje: \x00, \n, \r, \, ', " and \x1a )
Go to the top of the page
+Quote Post
.radex
post
Post #191





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


Apostrofy na wyrażenie + mysql_real_escape_string wszystko rozwiązuje. Nie potrzebne są dodatkowe zabezpiecznie przeciwko np. UNION
Go to the top of the page
+Quote Post
Jarod
post
Post #192





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(radex_p @ 9.05.2008, 17:15:23 ) *
Apostrofy na wyrażenie + mysql_real_escape_string wszystko rozwiązuje. Nie potrzebne są dodatkowe zabezpiecznie przeciwko np. UNION


Z czystej ciekawości, czy inne bazy rządzą się tymi samymi prawami?
Go to the top of the page
+Quote Post
.radex
post
Post #193





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


to zależy od SQL a nie od typu bazy danych. Przynajmniej tak mi się wydaje.
Go to the top of the page
+Quote Post
kilas88
post
Post #194





Grupa: Zarejestrowani
Postów: 305
Pomógł: 25
Dołączył: 27.01.2007

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


Odnośnie bezpieczeństwa mam takie pytanie.. Gdzieś tam wyczytałem, że baza danych MySQLi jest szybsza, lepsza i bezpieczniejsza od bazy MySQL. Na czym te różnice w bezpieczeństwie polegają?

I ja dodam funkcję, której używam przy zabezpieczaniu się:

  1. <?php
  2. function escape_data ($data) {
  3.  global $dbc; // zmienna z przypisanym połączeniem do bazy mysql
  4.  if (ini_get('magic_quotes_qpc')) {
  5. $data = stripslashes($data);
  6.  }
  7.  return mysql_real_escape_string(trim($data), $dbc);
  8. }
  9. ?>


Oczywiście jeszcze sprawdzam czy pobierana jest liczba, czy string oraz w miarę możliwości - zakres liczb, długość stringów i wszelkie inne opcje.
Go to the top of the page
+Quote Post
pyro
post
Post #195





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(marcio @ 6.04.2008, 23:34:11 ) *
Dajesz np na zmienne z get'a prosty str_replace np tak
  1. <?php
  2. $id = $_GET['id'];
  3. $nowy_id = str_replace("union", "", $id);
  4. ?>


www.bla.com/index.php?id=-1 UNI/**/ON SELECT 1;

Ten post edytował pyro 23.09.2008, 08:28:17
Go to the top of the page
+Quote Post
marcio
post
Post #196





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


@Up oczywiscie znaki takie jak -,*,/ tez mozna usunac (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

A co myslicie o takim nadzorowaniu http://www.uw-team.org/forum/viewtopic.php?f=5&t=6986
Go to the top of the page
+Quote Post
pyro
post
Post #197





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(marcio @ 5.11.2008, 15:50:49 ) *
@Up oczywiscie znaki takie jak -,*,/ tez mozna usunac (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

A co myslicie o takim nadzorowaniu http://www.uw-team.org/forum/viewtopic.php?f=5&t=6986


tak, sprobujesz je usunac wyrazeniami regularnymi to ja ci zaczne te znaki kodować, poza tym moge chciec umiescic takie znaki jak ukosniki i gwiazdki i co wtedy? dupne zabezpieczenie...

A nadzorowanie ktore podales napewno nie zabezpieczy 100%, moze tylko sluzyc jako dodatkowa nakladka bezpieczenstwa

Ten post edytował pyro 12.11.2008, 13:31:26
Go to the top of the page
+Quote Post
kayy
post
Post #198





Grupa: Zarejestrowani
Postów: 112
Pomógł: 1
Dołączył: 3.08.2008

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


Pytanie;

jeżeli użyje takiego czegoś, to wszystkie zmienne z $_GET i $_POST będą zabezpieczone?

  1. <?php
  2. function safe() {
  3.  
  4. foreach($_POST as $key => $item) $_POST[$key] = addslashes($item);
  5.  
  6. foreach($_POST as $key => $item) $_POST[$key] = mysql_real_escape_string($item);
  7.  
  8. foreach($_POST as $key => $item) $_POST[$key] = htmlspecialchars($item, ENT_QUOTES);
  9.  
  10. foreach($_POST as $key => $item) $_POST[$key] = strip_tags($item);
  11.  
  12. foreach($_GET as $key => $item) $_GET[$key] = addslashes($item);
  13.  
  14. foreach($_GET as $key => $item) $_GET[$key] = mysql_real_escape_string($item);
  15.  
  16. foreach($_GET as $key => $item) $_GET[$key] = htmlspecialchars($item, ENT_QUOTES);
  17.  
  18. foreach($_GET as $key => $item) $_GET[$key] = strip_tags($item);
  19.  
  20.  
  21.  
  22.  
  23. }
  24. ?>


Ten post edytował kayy 5.12.2008, 12:46:49
Go to the top of the page
+Quote Post
Black-Berry
post
Post #199





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


Takie coś będzie chyba szybsze i lepsze bo nie sprawdzasz słowa union a za pomocą union ktoś mi się włamał:

  1. <?php
  2. while ($key = key($_GET)) {
  3.        if (strlen($_GET[$key])>20
  4.        or eregi('union', $_GET[$key])
  5.        or eregi(';', $_GET[$key])
  6.        or eregi('=', $_GET[$key])) $_GET[$key] = 0;
  7.        next($_GET);
  8.    }
  9. ?>
Go to the top of the page
+Quote Post
ucho
post
Post #200





Grupa: Zarejestrowani
Postów: 300
Pomógł: 32
Dołączył: 31.07.2006

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


Cytat(radex_p @ 9.05.2008, 18:15:23 ) *
Apostrofy na wyrażenie + mysql_real_escape_string wszystko rozwiązuje. Nie potrzebne są dodatkowe zabezpiecznie przeciwko np. UNION

I to powinien być koniec dyskusji na temat zabezpieczania przed Sql Injection.
Na xss itp. wystarczy samo traktowanie wszystkich danych wejściowych za pomocą htmlspecialchars() - będzie po danych w bazie/na stronie widać czy ktoś próbował coś kombinować (co może być wadą lub zaletą (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ale będzie to niegroźne.

kayy: poza tym żę twój kod nieco dziwnie wygląda to:
-najpierw strip_tags()
-potem htmlspecialchars()
-a tylko na danych które będziesz używał w zapytaniach mysql_real_escape_string()
addslashes jest niepotrzebne, *_real_escape_string wystarcza

A jeszcze w kwestii sql injection to powinno się używać przede wszystkim jakiegoś DBO, preapared statements, lub jakiejkolwiek biblioteki która daje coś w stylu PEARowego DB::quoteSmart ( escape i odpowiednia apostrofy dla stringa automatycznie niezależnie od bazy z której się korzysta)
Go to the top of the page
+Quote Post

22 Stron V  « < 8 9 10 11 12 > » 
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: 23.08.2025 - 19:56