Autor Zpráva
M
Profil *
// 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 *
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 *
(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 *
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 *
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 *
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 *
funguje, díky... a co se bezpečnosti týče, stačí to?
okolojdouci
Profil *
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 *
Super, díky moc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: