Autor | Zpráva | ||
---|---|---|---|
M Profil * |
#1 · Zasláno: 19. 4. 2011, 17:43:24
// zabezpečím vstup vlastního ID $id = (int) $_SESSION['userID']; // zkontroluji jestli existuje nějaké ID a jestli je to číselný tvar if(isset($_GET['id']) && preg_match('/^[0-9]{1,9}$/',$_GET['id'])) { // zabezpečímě vstup GET $postID = (int) $_GET['id']; // Vyberu si informace o přenášené zprávě, kterou mám uchovanou v GET $sqlControl = "SELECT `id`,`postRecipient`,`postSender` FROM `messages` WHERE `id`=" . (int) $postID; if (!$resultControl = mysql_query($sqlControl)) echo "error"; else { while ($rowControl = mysql_fetch_array($resultControl)) { // Pokud jsem odesílatel nebo příjemce zprávy, můžu pokračovat if($rowControl['postRecipient']==$id || $rowControl['postSender']==$id) { // zobrazení zprávy, kterou příjmám z proměnné v inboxu $sql = "SELECT `id`,`postContent`,`postSender`,`postRecipient`,`postDate`,`postSubject`,`postConfirmation` FROM `messages` WHERE `id`=" . (int) $postID ; // převedení k zobrazení náležitostí autor, čas, texr, předmět if (!$result = mysql_query($sql)) echo "myslq error :"; else { // připravení výpisu while ($row = mysql_fetch_array($result)) { // práce s výpisem echo(" Mám tento kód, který má prvně zjistit zda-li uživatel chce zobrazit nějakou zprávu a poté, jestli k tomu vůbec má pravomoce, tudíž zjišťuji, zda-li je odesílatel nebo příjemce. Myslíte si, že takovýto kód stačí? Skript funguje, jen mi jde o bezpečnost, případně co přidat, co je špatně. Děkuji za doplňky. |
||
okolojdouci Profil * |
#2 · Zasláno: 19. 4. 2011, 18:45:56
Zbytečně si to komplikuješ. Řádky 11-19 můžeš zredukovat do jednoho dotazu, kde jedním WHERE a dvěma podmínkami ověříš existenci zprávy, to, jestli jsem odesilatel nebo příjemce a ještě k tomu tu zprávu z databáze vytáhneš.
Teď si nejsem jist, co vrací (int) $_GET['id'], když $_GET['id'] je nenumerické. Odhadl bych, že nulu, takže řádek 5 můžeš vynechat. |
||
M Profil * |
#3 · Zasláno: 19. 4. 2011, 18:51:20
(int) $_GET['id'] vrací identifikační číslo příjemce, tudíž numero, proto je tam logicky i kontrola - [0-9] u preg_match. Nejsem odborník na složené SQL dotazy, nenastínil by si mi možný pokrok - daný dotaz?
|
||
okolojdouci Profil * |
#4 · Zasláno: 19. 4. 2011, 19:06:32
M:
„identifikační číslo příjemce, tudíž numero, proto je tam logicky i kontrola - [0-9] u preg_match“ To mi právě logické nepřipadá. Jestliže (int) vrátí vždy číslo (třeba i (int)"text"), pak je ta kontrola [0-9] nadbytečná. A k těm řádkům 11-19 .. tři kroky - jestli zpráva existuje - jestli mám právo ji číst - tak ji ještě jednou vytáhnu spoj do "vytáhnu z databáze zprávu, která má dané ID a zároveň mám právo ji číst". |
||
M Profil * |
#5 · Zasláno: 19. 4. 2011, 19:11:35
Logicky je mi jasné, jak to myslíte, jde mi spíše o problém s tvořením syntaxe a přidáním podmínek, zda-li vytvořit $sql = "SELECT..."; a přidat if($sql), zda-li bys mohl představit ukázku možného řešení. Jsem pro, jen nevím jak.
|
||
okolojdouci Profil * |
#6 · Zasláno: 19. 4. 2011, 19:18:13
Náhrada řádků 5-19:
$postID = (int) $_GET['id']; $sql = "SELECT `id`,`postContent`,`postSender`,`postRecipient`,`postDate`,`postSubject`,`postConfirmation` FROM `messages` WHERE `id`=" . (int) $postID. " AND ( `postSender` = ".$id." OR `postRecipient` = ".$id." )" ; Snad jsem nic nepřehlídl. |
||
M Profil * |
#7 · Zasláno: 19. 4. 2011, 19:23:37
funguje, díky... a co se bezpečnosti týče, stačí to?
|
||
okolojdouci Profil * |
#8 · Zasláno: 19. 4. 2011, 19:28:07
M:
„co se bezpečnosti týče, stačí to?“ Pokud jde o bezpečnost, je to totéž, cos měl ty rozepsáno ve více krocích. A ano, myslím, že je to bezpečné. Ještě vidím, že jsem tam dal ten (int) i do dotazu, tam je už zbytečný. |
||
M Profil * |
#9 · Zasláno: 19. 4. 2011, 19:33:11
Super, díky moc.
|
||
Časová prodleva: 13 let
|
0