Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Skrypt tokena
terreska
post 6.01.2007, 20:46:48
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 23.07.2006

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


Mam taki skrypcik (token tekstowy).
Niestety chyba nie przekazuje mi wartości $wynik, bo cały czas wywala komunikat: "Podales zly wynik. Twoja wiadomosc nie moze zostac wyslana."
Co robię źle? Próbowałam na różne sposoby i nic.

  1. case "sprawdz":
  2.  
  3. $a=rand(1, 10);
  4. $b=rand(1, 10);
  5. $wynik=($a+$b);
  6.  
  7. echo '<center>Podaj wynik: '.$a.'+'.$b.'=';
  8. ?>
  9. <form method="post" action="index.php?action=sprawdz2">
  10. <table>
  11. <tr><td>Wynik:</td><td><input name="licz" type="text" size="40"></td></tr>
  12. <tr><td>&nbsp;</td><td><input type="submit" name="sub" value="Ok"> </td></tr>
  13. <input name="wynik" type="hidden" value="$wynik">
  14. </table>
  15. </form>
  16. <?php
  17. break;
  18.  
  19. case "sprawdz2":
  20. echo " test: ".$wynik; [b]// tutaj wyswietla mi tylko napis $wynik[/b]
  21. if ('$wynik'=='$licz')
  22. {
  23. mail($webmasteremail,$type,
  24. "
  25. E-Mail: $email
  26. Temat: $type
  27. Twoje pytanie: 
  28. $info
  29. $message $czas $data
  30. ", "From: $email");
  31. $content=("Twoja wiadomosc zostala wyslana.");
  32. }
  33. else
  34. {
  35. $content=("Podales zly wynik. Twoja wiadomosc nie moze zostac wyslana.");
  36.  
  37. }
  38.  
  39. break;
Go to the top of the page
+Quote Post
cadavre
post 6.01.2007, 20:50:01
Post #2





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

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


Może by tak używać globalnych? $_POST['wynik'] a nie $wynik. Tak tylko w register_globals, które jest masakrycznie niebezpieczne...

Poza tym:
1. '$wynik' - takie zmienne nie będą widoczne. Po co w ogóle apostrofy? Jeśli już to " zamiast '.
2. Po co $cos=("asasa"); i nawiasy? $cos = "asasa"; i tyle.

Ten post edytował cadavre 6.01.2007, 20:51:09


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post
ikioloak
post 6.01.2007, 20:50:36
Post #3





Grupa: Zarejestrowani
Postów: 416
Pomógł: 0
Dołączył: 8.01.2004

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


gdzie ty sie uczylas tak pisac? Do zmiennych z przeslanych przez formularz odwolujesz sie przez tablice $_POST i $_GET. Nie:
  1. <?php
  2. if ('$wynik'=='$licz')
  3. ?>

a
  1. <?php
  2. if ($_POST['wynik']==$licz)
  3. ?>

Czyli raz ze $_POST to dwa, bez apostrofow. Zrezygnuj tez z takiej konstrukcji (dziwnej):
  1. <?php
  2. $content=("Podales zly wynik. Twoja wiadomosc nie moze zostac wyslana.");
  3. ?>

na rzecz normalnej:)
  1. <?php
  2. $content = "Podales zly wynik. Twoja wiadomosc nie moze zostac wyslana.";
  3. ?>

Duzo nauki przed toba winksmiley.jpg

Ten post edytował ikioloak 6.01.2007, 20:52:29
Go to the top of the page
+Quote Post
terreska
post 6.01.2007, 22:01:46
Post #4





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 23.07.2006

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


Bardzo Wam dziękuję za rady.
No niestety nie mam mnie kto dobrze nauczyć php winksmiley.jpg i ciężko mi nawet po Waszych radach coś poprawić.
Czy możecie wkleić cały poprawiony kod, a wtedy porównam sobie i zrozumiem guitar.gif

Zrobiłam tak jak napisaliście i nadal nie przekazuje wartości $wynik
Go to the top of the page
+Quote Post
ikioloak
post 6.01.2007, 22:05:29
Post #5





Grupa: Zarejestrowani
Postów: 416
Pomógł: 0
Dołączył: 8.01.2004

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


Wklej caly kod. Masz namotane raczej cos jeszcze wczensiej. Myslalem ze wynik jest przekazywany przez formularz, teraz widze ze jest wynikiem jakichs obliczen.
Go to the top of the page
+Quote Post
E -dd
post 6.01.2007, 22:08:53
Post #6





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 18.12.2006
Skąd: Warszawa

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


Jaki sens ma tworzenie takiego tokena, jak bot odczyta sobie zawartość pola hidden i już. Jeśli już tworzysz tokena (chodź odradzam) to używaj do kodu tokena sesji.

Polecam przeczytanie tego:
www.webaudit.pl/blog/2006/captcha-nie-uzywaj/

ps. Zamykasz tagi php, więc kod formularza nie czyta zmiennej bo to tylko html.


--------------------
Program TV, Sukces internetowy, Forum dla administratorów stron
Go to the top of the page
+Quote Post
terreska
post 6.01.2007, 22:20:53
Post #7





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 23.07.2006

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


Tak, jest to wynik obliczeń i właśnie wyniku tych obliczeń nie potrafię przekazać dalej...

Wiem, że każdy chce dobrze, ale bardzo proszę niech ktoś poprawi mój kod, który umieściłam na samej górze. Będę wdzięczna.
Go to the top of the page
+Quote Post
Norbas
post 7.01.2007, 00:09:49
Post #8





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 6.02.2006

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


  1. <?php
  2. function getPOST($n) {
  3. return (isset($_POST[$n])) ? $_POST[$n] : '';
  4. }
  5.  
  6. $wynik = intval(getPOST('wynik'));
  7. $a = intval(getPOST('a'));
  8. $b = intval(getPOST('b'));
  9. $komunikat = '';
  10. if ($wynik) {
  11. if ($wynik==$a+$b) {
  12. // wysłanie listu
  13. $komunikat = 'ok';
  14. }
  15. else
  16. $komunikat = 'nieprawidłowy wynik';
  17. }
  18. if ($komunikat)
  19. echo $komunikat;
  20. if ($komunikat != 'ok') {
  21. $a=rand(1, 10);
  22. $b=rand(1, 10);
  23. ?>
  24. <form method="post" action="index.php">
  25. <input name="a" type="hidden" value="<?php echo $a; ?>">
  26. <input name="b" type="hidden" value="<?php echo $b; ?>">
  27. <table>
  28. <tr><td><?php echo $a . '+' . $b; ?>=</td><td><input name="wynik" type="text"></td></tr>
  29. <tr><td> </td><td><input type="submit" value="Ok"> </td></tr>
  30. </table>
  31. </form>
  32. <?php
  33. }
  34. ?>


--------------------
Go to the top of the page
+Quote Post
E -dd
post 7.01.2007, 00:16:55
Post #9





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 18.12.2006
Skąd: Warszawa

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


Kod
<input name="wynik" type="hidden" value="$wynik">

zamień na
Kod
<input name="wynik" type="hidden" value="<?php echo $wynik; ?>">

a
Kod
if ('$wynik'=='$licz')

na
Kod
if ($wynik == $licz )


Myślę że będzie ok. Tylko zamiast $wynik i $licz powinnieneś dawać $_POST['wynik'] i $_POST['licz'] smile.gif

ps. Sorka za tamtą wypowiedź o sesjach, nie zauważyłem że kod do podania to wynik obliczeń smile.gif


--------------------
Program TV, Sukces internetowy, Forum dla administratorów stron
Go to the top of the page
+Quote Post
terreska
post 7.01.2007, 22:03:28
Post #10





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 23.07.2006

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


Bardzo Wam dziękuję za pomoc.
biggrin.gif
Nie wiem tylko o co dokładnie chodzi z tym bezpieczeństwem register globals... Czytałam bardzo dużo o tym, ale jest to dla mnie zbyt trudne... jak na razie.

Czy może ktoś podać podstawy bezpieczeństwa, jak pisać żeby nie było konieczne register globals i jak "się zabezpieczać" cool.gif ?
Go to the top of the page
+Quote Post
cadavre
post 7.01.2007, 22:26:13
Post #11





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

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


Aby nie używać rg zapisujesz zmienne jako globale skąd zmienna pochodzi. Jeśli masz zmienną $zmienna i:
Pochodzi z formularz POST: $_POST['zmienna']
Pochodzi z formularza GET lub z adresu w pasku: $_GET['zmienna']
Pochodzi z sesji: $_SESSION['zmienna']
Pochodzi z ciasteczka $_COOKIE['zmienna']

O $_REQUEST się nie ucz. tongue.gif


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post
E -dd
post 8.01.2007, 06:39:33
Post #12





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 18.12.2006
Skąd: Warszawa

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


Można to wytłumaczyć tak, masz formularz i dane przesyłasz metodą post i wysyłasz do skryptu skrypt.php. Jeśli w skrypcie dasz
Kod
echo $nazwa_pola;

to ktoś będzie mógł wpisać w przeglądarce skrypt.php?nazwa_pola=jakis_kod_brzydki i wtedy wyświetli Ci się to na stronie. Ale jeśli dasz
Kod
echo $_POST['nazwa_pola'];

wtedy dane wyświtlone zostaną z formularza wysłanego przez post.

Rozumiesz ? smile.gif


--------------------
Program TV, Sukces internetowy, Forum dla administratorów stron
Go to the top of the page
+Quote Post
terreska
post 9.01.2007, 13:34:40
Post #13





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 23.07.2006

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


Trochę rozumiem, a jak np. musiałby wyglądać taki "brzydki kod"?
Co za pomocą tego kodu można uzyskać? Tzn. można pobrać jakieś dane ze strony czy zniszczyć stronę?
Go to the top of the page
+Quote Post
E -dd
post 9.01.2007, 15:38:47
Post #14





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 18.12.2006
Skąd: Warszawa

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


Głównie do tego używa się JS. Ale można w php np. pobrać alb o zmienić informacje w bazie, wczytać inną stronę itp. poczytaj o SQL injection (ps. nie jestem pewien na 100% czy to się tak pisze biggrin.gif)


--------------------
Program TV, Sukces internetowy, Forum dla administratorów stron
Go to the top of the page
+Quote Post
goped
post 9.01.2007, 20:36:07
Post #15





Grupa: Zarejestrowani
Postów: 156
Pomógł: 0
Dołączył: 28.11.2003
Skąd: gliwice

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


Poczytaj jak kolega mowil o SQL injection oraz o HTML injection. Chcialem zauwazyc ze formularz przy poscie tez mozna oszukac i podeslac "brzydki kod", wiec i tak trzeba uwazac co sie robi ze zmiennymi tongue.gif
To jest inny przyklad dziury z wlaczonym rg:
  1. <?php
  2. if (strlen($_GET[a])>5) $auth=md5($_GET[a]);
  3. if ($auth=='213271839712391273871273912731') $admin=1;
  4. ?>

a.php?auth=213271839712391273871273912731

smile.gif


--------------------
www.motorower.com.pl - kup sobie cos :]
Go to the top of the page
+Quote Post
terreska
post 12.01.2007, 12:46:31
Post #16





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 23.07.2006

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


Troche o tym poczytałam i coś tam kombinuje.
Mam teraz inny problem.
Jaką funkcję zastosować, aby sprawdzić czy użytkownik wypełnił wszystkie pola formularza kontaktowego i w przypadku jeśli nie, wyświetlałby się stosowny komunikat a mail nie został wysłany?
Go to the top of the page
+Quote Post
spryciula
post 12.01.2007, 13:14:42
Post #17





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 9.12.2006

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


użyj JAVASCRIPT(ale użytkownik zawsze może wyłączyć obsługę JAVASCRIPT, i już nie działa), i zweryfikuj czy wypełnił pole

  1. <?php
  2. <script TYPE="text/javascript" LANGUAGE="JavaScript">
  3. <!-- begin
  4. function clean_form()
  5. {
  6. if (document.form.nazwa_pola.value = ""){
  7.  alert("Pole 'Kod Dostawcy' nie może zostać puste!!!");
  8. return false;
  9.  }
  10.  
  11. }
  12. //-->
  13. </SCRIPT>
  14. ?>



i jeszcze dodaj w definicji formularza, onsubmit, funkcja zwraca ci true(wszystko ok, wyślij) or false(nie wysyła)

  1. <?php
  2. <form name ="form" method="post" action="dodaj_dostawce_skrypt.php" onsubmit="if (sprawdz(this)) return true; return false;">
  3. ?>


Ten post edytował spryciula 12.01.2007, 13:15:16
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: 26.06.2025 - 09:16