Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem ze zmienną z formularza
maulus
post 25.10.2005, 18:32:08
Post #1





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 15.12.2003

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


  1. <form action='index.php' method='post'>
  2.  
  3. <input type='text' name='pass' value='' />
  4. <input type=submit>
  5. </form>
  6.  
  7. <?php
  8.  
  9. $haslo=$_POST[pass];
  10. if($haslo == "root" )
  11. {
  12. echo "prawda";
  13. }
  14. else
  15. {
  16. echo"falsz<br>";
  17. echo"$haslo<br>";
  18. echo"$login<br>";
  19. }
  20. ?>


mam taki kodzik w poli text wpisuje
1 == 1 or 1==1 or $pass

i dlaczego wyrzuca mi fałsz zamiast prawdy questionmark.gif

btw. nie że bym chciał gdzieś wejść tylko zabezpieczenia moich własnych skryptów


--------------------
gg:5216061
Warsztat: Win XP HE | Apache - 2.0.49 | PHP - 5 RC | MySQL - 4.0.18 | Narzędzia: WinSyntax
Artykyłu v0.2beta[b]lllllllllllllllllllllllll 100%
Go to the top of the page
+Quote Post
Najki
post 25.10.2005, 18:52:49
Post #2





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 12.02.2004
Skąd: Poznań

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


Trochę nie do końca rozumiem. Jeśli wpiszesz w formularzu "root" to zadziała dobrze. Jeśli natomiast to co napisałeś ("1 == 1 or 1==1 or $pass") ma być podmienionym warunkiem z instrukcji warunkowej (if/else) to jest to bez sensu, bo:
- 1 zawsze jest równe 1
- podwoiłeś ten sam warunek (1==1 i 1 == 1 to to samo)
- jeśli na serwerze register_globals ustawione jest na Off (a zazwyczaj tak jest) to do pola z formularza nie odwołasz się przez $pass, a jedynie przez $_POST['pass']
- jeśli warunkiem instrukcji warunkowej jest sama nazwa zmiennej to instrukcja ta sprawdza czy zmienna $pass została ustawiona, wtedy wyjdzie "prawda" bez względu na to co wpisze w formularzu użytkownik (jeżeli coś wpisze)

Ten post edytował Najki 25.10.2005, 18:54:10


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 25.10.2005, 18:56:10
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Rozumiem to tak: do inputa z haslem wpisujesz "1 == 1 or 1==1 or $pass"?
Jeslli tak to sktyp dziala dobrze: porownuje ($haslo == "root")
czyli
("1 == 1 or 1==1 or $pass" == "root" )
reszta jest chyba jasna?


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Ociu
post 25.10.2005, 19:56:56
Post #4





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




  1. <form action='index.php' method='post'>
  2.  
  3. <input type='text' name='pass' value='' />
  4. <input type=submit>
  5. </form>
  6.  
  7. <?php
  8. $password = 'root';
  9. $haslo = $_POST['pass'];
  10.  
  11. if($haslo == $password )
  12. {
  13. echo "prawda";
  14. }
  15. else
  16. {
  17. echo "falsz<br>";
  18. echo $haslo."<br>";
  19. }
  20. ?>
Go to the top of the page
+Quote Post
maulus
post 26.10.2005, 15:32:03
Post #5





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 15.12.2003

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


Cytat(dr_bonzo @ 2005-10-25 19:56:10)
Rozumiem to tak: do inputa z haslem wpisujesz "1 == 1 or 1==1 or $pass"?
Jeslli tak to sktyp dziala dobrze: porownuje ($haslo ==  "root")
czyli
("1 == 1 or 1==1 or $pass" ==  "root" )
reszta jest chyba jasna?

no dobra a da się zrobić coś takiego :

  1. <?php
  2.  
  3. if(" 1==1" or $pass == "root" )
  4.  
  5. ?>


haslo z input będzie się równać:
1==1 or $pass

no i wtedy nie powinno dać prawdy questionmark.gif

Ten post edytował maulus 26.10.2005, 15:33:02


--------------------
gg:5216061
Warsztat: Win XP HE | Apache - 2.0.49 | PHP - 5 RC | MySQL - 4.0.18 | Narzędzia: WinSyntax
Artykyłu v0.2beta[b]lllllllllllllllllllllllll 100%
Go to the top of the page
+Quote Post
dr_bonzo
post 26.10.2005, 17:07:43
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Dopoki nie uzyjesz eval() na danych z formularza to nie potraktuje ci tych danych jak KOD php tylko jako string(ew. int, float).
Czyli
  1. <?php
  2. if ( $haslo == 'tajne haslo' )
  3. {
  4. //...
  5. }
  6. ?>

wpusci cie tylko gdy w formularzu wpiszesz tajne haslo.
Takie cos nic ci nie popsuje w kodzie: TRUE OR $haslo bo to bedzie STRING, lancuch znakow, a nie kod php (po podstawieniu za $haslo:
  1. <?php
  2. if ( "TRUE OR $haslo" == 'tajne haslo' )....
  3. ?>
.
Juz jasne?


--------------------
Nie lubię jednorożców.
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: 19.07.2025 - 02:43