Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zabezpieczenie związane z metodą GET, Jak sprawdzać dane trafiające do bazy danych przez metodę GET
Jozjasz
post 6.11.2011, 17:59:01
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.09.2009

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Niktoś
post 6.11.2011, 18:05:44
Post #2





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

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


A co to za zmienna $url_a?
Go to the top of the page
+Quote Post
Jozjasz
post 6.11.2011, 18:07:14
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.09.2009

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


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

Ten post edytował Jozjasz 6.11.2011, 18:08:16
Go to the top of the page
+Quote Post
Niktoś
post 6.11.2011, 18:11:42
Post #4





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

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


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ę.
Go to the top of the page
+Quote Post
Jozjasz
post 7.11.2011, 15:57:41
Post #5





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.09.2009

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


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'] ?
Go to the top of the page
+Quote Post
Sephirus
post 7.11.2011, 16:32:20
Post #6





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


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
        )

)



--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
cudny
post 7.11.2011, 23:55:30
Post #7





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


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


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 18:34