Ograniczenie punktów |
Ograniczenie punktów |
9.04.2011, 08:01:38
Post
#1
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 0 Dołączył: 22.02.2010 Ostrzeżenie: (0%) |
Jeśli w tabeli rejestracja w rekordzie użytkownika wpisze, że ma 400 punktów to chce, aby przy wyborze nagrody jak nie będzie miał tylu punktów wywalało mu błąd.
Tabela : rejestracja Komórka : punkty Próbowałem tak : $nick = $_SESSION['username']; $punkty = "SELECT punkty FROM rejestracja"; $nick = $punkty; if ($punkty <= 50) die ('Nie masz tylu punktów'); No i w bazie zapisuje , 60 punktów i błąd Nie masz tylu punktów pojawia się cały czas. Proszę o pomoc . |
|
|
9.04.2011, 08:06:11
Post
#2
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) |
Polecam poczytać, jak wykonujemy zapytania SQL... bo na pewno nie tak, jak napisałeś...
-------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
9.04.2011, 08:12:25
Post
#3
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 0 Dołączył: 22.02.2010 Ostrzeżenie: (0%) |
Dzięki za podpowiedź, już wszystko działa,
Dla zainteresowanych zapytanie wygląda tak : $db=mysql_query("SELECT punkty FROM rejestracja"); $nick = $_SESSION['username']; $o=mysql_fetch_array($db); $punkty =$o['punkty']; $nick = $punkty; if ($punkty <= 50) die ('Nie masz tylu punktów'); |
|
|
9.04.2011, 08:15:47
Post
#4
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 12 Dołączył: 8.04.2011 Ostrzeżenie: (0%) |
Przydałoby się jeszcze uzależnić zapytanie od użytkownika, bo w tej chwili obojętnie kto będzie zalogowany to zapytanie zawsze zwróci wszystkie rekordy z bazy, a Ty weźmiesz pod uwagę zawsze tylko pierwszy rekord.
Nie wiem jak wygląda u Ciebie tabela rejestracja, ale to powinno być coś w tym stylu: SELECT punkty FROM rejestracja WHERE login = 'tutaj_login' |
|
|
9.04.2011, 08:27:40
Post
#5
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 0 Dołączył: 22.02.2010 Ostrzeżenie: (0%) |
Masz rację. Bierze tyko 1-wszy rekord . Zmieniłem to na :
$db=mysql_query("SELECT punkty FROM rejestracja WHERE username = '$nick'"); $nick = $_SESSION['username']; $o=mysql_fetch_array($db); $punkty =$o['punkty']; $nick = $punkty; if ($punkty <= 50) die ('Nie masz tylu punktów'); Tylko mam problem czy dobrze uzupełniłem to : Kod username = '$nick Bo teraz nawet jeśli ma punkty to wywala, że nie ma . |
|
|
9.04.2011, 08:34:32
Post
#6
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 12 Dołączył: 8.04.2011 Ostrzeżenie: (0%) |
Przypisane do zmiennej $nick masz dopiero po wykonaniu zapytania. Powinno być odwrotnie.
Polecam w takich przypadkach po prostu przypisać sobie zapytanie do zmiennej i wypisać ją sobie na ekran, żeby sprawdzić czy na pewno jest takie, jakie chcemy (tylko testowo, docelowo oczywiście nie wypisujemy nigdzie zapytań ), czyli np: Kod $sql = "SELECT punkty FROM rejestracja WHERE username = '$nick'"; echo $sql; $db=mysql_query($sql); W takim przypadku na pewno zorientujesz się co jest nie tak. Swoją drogą warto jeszcze doczytać na temat SQL Injection, bo sklejanie zapytania w ten sposób (czyli dodanie po prostu zmiennej $nick, która wcześniej była wprowadzona przez użytkownika, do zapytania) to proszenie się o kłopoty |
|
|
9.04.2011, 08:42:20
Post
#7
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 0 Dołączył: 22.02.2010 Ostrzeżenie: (0%) |
Ok, dziala
A jak zabezpieczyć to przed atakiem ? Teraz mój kod wygląda : $nick = $_SESSION['username']; $db=mysql_query("SELECT punkty FROM rejestracja WHERE username = '$nick'"); $o=mysql_fetch_array($db); $punkty =$o['punkty']; $nick = $punkty; if ($punkty <= 50) die ('Nie masz tylu punktów'); |
|
|
9.04.2011, 08:47:22
Post
#8
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 12 Dołączył: 8.04.2011 Ostrzeżenie: (0%) |
Sposobów na zabezpieczenie jest kilka, ale warto temat poznać od podstaw (moim zdaniem jak się zrozumie w jaki sposób można wykonać atak SQL Injection, to potem bardziej się na takie sprawy uważa).
Na początek polecam artykuł z wiki: http://pl.wikipedia.org/wiki/SQL_injection Opisuje zarówno proste przykłady ataków, jak i sposoby radzenia sobie z nim. |
|
|
9.04.2011, 08:48:37
Post
#9
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 0 Dołączył: 22.02.2010 Ostrzeżenie: (0%) |
A czy dodanie tylko mojego ip do phpmyadmina (tylko z mojego kompa można się zalogować do niego ) zabezpieczy stronę ?
|
|
|
9.04.2011, 08:53:21
Post
#10
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 12 Dołączył: 8.04.2011 Ostrzeżenie: (0%) |
Zabezpieczy, ale tylko dostęp do samego phpmyadmina. Wiele zależy jeszcze od ustawień samej bazy (można tam ograniczyć, że dostęp jest możliwy tylko z localhosta, wtedy jedynie skrypty na serwerze będą mogły z niej korzystać, a więc phpmyadmin i Twoja strona).
A jeśli chodzi o SQL Injection to w ten sposób się przed nim nie ustrzeżesz, bo hipotetyczny włamywacz tylko lekko modyfikuje Twoje zapytania, a więc dla samej bazy nie ma różnicy między wywołaniem takim, jakie chcesz, a zmodyfikowanym przez intruza. |
|
|
Wersja Lo-Fi | Aktualny czas: 20.04.2024 - 03:11 |