Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] przekazywaine parametrow w URL
Forum PHP.pl > Forum > Przedszkole
hhg
z tego co wiem przekazywanie parametrow w URL

Kod
storna.pl/podstrona.php?parametr1=wartosc1


jest niezbezpieczne (np PHP injection)

czy przed tym wystarczy zabepieczenie:
  1. <?php
  2. switch ($_GET['parametr1']) {
  3.  
  4. case 'podstrona1.html':
  5. operacje na wartosci..
  6. case ....
  7.  
  8. }
  9. ?>



? jak sie zabezpieczyc przed takimi url-atakami?
tsharek
Witam,

Może się mylę, ale wystarczy rzutowanie lub sprawdzanie typów + nie używanie EVALa czy innej funkcji wykonującej coś ze stringa (SYSTEM, EXEC) ze zmiennych hyperglobalnych. W Twoim przypadku dodałbym jednego ifa:
  1. <?php
  2. if(!isset($_GET['parametr1'] || !is_string($_GET['parametr1'])) $_GET['parametr1']='';
  3.  
  4. switch ($_GET['parametr1']) {
  5.  
  6. case 'podstrona1.html':
  7. operacje na wartosci..
  8. case ....
  9.  
  10. }
  11. ?>

żeby nie otrzymywać warningów o niezgodnści typów jak ktoś wyśle
Kod
storna.pl/podstrona.php?parametr1['ble']=wartosc1


Pozdrawiam,
tsharek
hhg
czyli atak przez to jest niemozliwy??
fredzio90
jeżeli wartościami są TYLKO liczby to polecam taki sposób:

  1. <?php
  2. if(intval($_GET['parametr1'])) {
  3. switch ($_GET['parametr1']) {
  4.  
  5. case 'podstrona1.html':
  6. operacje na wartosci..
  7. case ....
  8.  
  9. }
  10. }
  11. ?>


albo ogólne zabezpieczenie:

  1. <?php
  2. if (preg_match("/union|select/i", strtolower($_SERVER['REQUEST_URI']))) {
  3. die('System wykrył obecność nieprawidłowej zmiennej w adresie URL. Prawdopodobnie pró
    ba włamania się do systemu.'
     );
  4. }
  5. ?>
tsharek
Cytat(fredzio90 @ 29.08.2007, 15:24:08 ) *
jeżeli wartościami są TYLKO liczby to polecam taki sposób:

  1. <?php
  2. if(intval($_GET['parametr1'])) {
  3. switch ($_GET['parametr1']) {
  4.  
  5. case 'podstrona1.html':
  6. operacje na wartosci..
  7. case ....
  8.  
  9. }
  10. }
  11. ?>

Takie coś CI wogle nie zadziała, bo w w casie masz stringa.


Cytat
albo ogólne zabezpieczenie:

  1. <?php
  2. if (preg_match("/union|select/i", strtolower($_SERVER['REQUEST_URI']))) {
  3. die('System wykrył obecność nieprawidłowej zmiennej w adresie URL. Prawdopodobnie pró
  4. a włamania się do systemu.' );
  5. }
  6. ?>

Cytat
addslashes()


A to raczej odnosi się sqlinjection, a najleprzym sposobem na zabezpieczenie przed tym są jednak funkcje z *_escape_string
hhg
Cytat
Takie coś CI wogle nie zadziała, bo w w casie masz stringa.
to bylo schematycznie smile.gif

Kod
inval(); instrukcje


hmm a jezeli ktos wstawi w $_GET['zmienna'] np schemat:



Kod
3 ); $sql="DROP TABLE USERS" ... funkcja(



to będzie


Kod
intval(3); $sql="DROP TABLE USERS" ... funkcja()
tsharek
ojejku.. a czemu miało by tak niby być? chyba nie rozumiesz zasad działania języka PHP. Jeżeli nie użyjesz funkcji eval to nigdy nic nie zdziałasz wpisując niewadomo co w $_GET/$_POST/$_COOKIE
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.