Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zabezpieczenie związane z metodą GET
Forum PHP.pl > Forum > PHP
Jozjasz
witam,

Myślę jak napisać skrypt, który będzie sprawdzał długość każdego stringu przesłanego za pomocą GET - Każdego, a nie pojedyńczego, gdzie trzebaby za każdym razem podawać nazwę zmiennej...

Prototyp(niestety nie działający), mógłby wyglądać mniej więcej tak... Proszę o wskazówkę jak sobie z tym poradzić.
  1. <?php
  2.  
  3. if(isset($_GET)){
  4.  
  5. $dl = $_GET;
  6.  
  7. $ocena = strlen($dl);
  8. if($ocena > 20){
  9. #exit();}
  10. }
  11.  
  12. ?>
  13. <a href="abhor.php?dana=dlugoscslowa">link</a>



PS
Myślę, że dobrym zabezpieczeniem jesli taka zmienna ma trafić do zapytania SQL jest dodatkowo sprawdzenie każdej wartości, czy odpowiada ona tej która znajduje się w bazie danych (oczywiście jeśli jest ich większa ilość, to potrzebne jest połączenie z bazą danych). Np.

  1. if(isset($_GET['model'])){
  2. $model = strip_tags($_GET['model']);
  3.  
  4. @require_once("polaczeniezbaza.php");
  5. $q = "select nazwa from heroes where hero='latanie' ";
  6. $r = @mysqli_query($connect, $q);
  7.  
  8. while($row = @mysqli_fetch_assoc($r)){
  9. $naz = $row['nazwa'];
  10. if($model == $naz){
  11. $checkme = 1;}
  12. }
  13. if(!isset($checkme)){
  14. header("location: $url_a");
  15. exit();}
  16.  
  17.  
  18. }


czy stosowanie takich zabezpieczeń ma sens? Proszę o komentarz.
Niktoś
A co to za zmienna $url_a?
Jozjasz
chciałem właśnie edytować żeby to dopisać, ale coś nie działa edytowanie. - Po prostu ta zmienna odsyła do strony głownej index.php

pozdro
Niktoś
Ależ to standardowe rozwiązanie ,a nie super zabezpieczenie.
Przed wysłanie parametrów zapisujesz je do bazy danych.Na drugiej stronie odbierasz parametry i sprawdzasz ich istnienie w bazie danych.Jeśli nie to odsyłasz na inną stronę.
Jozjasz
Dzięki, a jeśli chodzi o pierwszy sposób sprawdzania długości wszystkich danych przesyłanych przez metode GET - jest taka możliwość? Czy trzeba za każdym razem odwoływać się indywidualnie do każdej zmiennej i pisać, np. $_GET['nazwazm'] ?
Sephirus
Cytat(Jozjasz @ 7.11.2011, 15:57:41 ) *
Dzięki, a jeśli chodzi o pierwszy sposób sprawdzania długości wszystkich danych przesyłanych przez metode GET - jest taka możliwość? Czy trzeba za każdym razem odwoływać się indywidualnie do każdej zmiennej i pisać, np. $_GET['nazwazm'] ?


Nie problem - starczy prosta funkcja:

  1. function getGetLengths()
  2. {
  3. $minLength = 100000;
  4. $lengths = array();
  5. foreach($_GET AS $key => $value)
  6. {
  7. $lengths[$key] = strlen($value);
  8. if($minLength > strlen($value)) $minLength = strlen($value);
  9. }
  10.  
  11. return array('minimal_length' => $minLength, 'get_lenghts' => $lengths);
  12. }
  13.  
  14. print_r(getGetLengths());


Zwraca najkrótszą długość getów ogólnie i długości wszystkich getów wink.gif

Przykład dla test.php?a=123456789&b=abc&c=xyz098

Zwraca:

Kod
Array
(
    [minimal_length] => 3
    [get_lenghts] => Array
        (
            [a] => 9
            [b] => 3
            [c] => 6
        )

)

cudny
Niestety nie zadziała to w przypadku tablic wielowymiarowych.
Należy w takim wypadku użyć rekurencji:
  1.  
  2. class Validation {
  3.  
  4. protected $_len = array();
  5. function checkLen($get) {
  6. foreach($get as $index => $value) {
  7. if(is_array($value)) $this->checkLen($value);
  8. $this->_len[] = strlen($value);
  9. )
  10. }
  11. }


W polu $_len znajdują się wszystkie długości stringów.
Oczywiście możesz metodę dostosować do własnych i validować każdą ze zmiennych smile.gif
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.