Autor Zpráva
kokolino
Profil *
čawte
chcem sa spýtať či je bezpečný spôsob prenášať v URL hodnotu podľa, ktorej potom vyberám isté veci z DB, ak nie ako to riešite ?
ako to spraviť bezpečne ?
ak som nazval túto tému zle predom sa ospravedlňujem nevedel som to inak nazvať

uvod.php kde mám len určité veci o tovare
<?php
require "db.php";
echo"<table border='1'><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td></tr>";
$vyber=mysql_query ($a="SELECT id_tovaru, nazov , autor, popis, cena, zlava, nova_cena, obrazok,obrazok_alt, farba , material 
					FROM bakalarka.tovar a JOIN bakalarka.farba b ON ( a.id_farby = b.id_farby ) 
					JOIN bakalarka.material c ON ( a.id_materialu = c.id_materialu)") or print ("chyba <br />" .$a."<br />".mysql_error());
while($row=mysql_fetch_array($vyber))
		{
		$popis=substr($row['popis'], 0, 12);
		echo "<tr>";
		echo "<td>".$row['id_tovaru']. "</td>";
		echo"<td><img src=".$row['obrazok']." alt=".$row['obrazok_alt']." align='left'></td>";
		echo "<td>".$row['nazov']. "</td>";
		echo "<td>".$row['autor']. "</td>";	
		echo "<td>".$popis. "</td>";
		echo "<td>".$row['cena']. "</td>";
		echo "<td><a href='index.php?id=detail&hodnota=".$row['nazov']."'>detaili tovaru</a></td>";
		echo "</tr>";
		}
echo"</table>";
?>


detaili.php tu mám vypísane všetko o danom tovare
<?php
require "db.php";
echo"<table border='1'><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td></tr>";
$vyber=mysql_query ($a="SELECT id_tovaru, nazov , autor, popis, cena, zlava, nova_cena, obrazok,obrazok_alt, farba , material 
					FROM bakalarka.tovar a JOIN bakalarka.farba b ON ( a.id_farby = b.id_farby ) 
					JOIN bakalarka.material c ON ( a.id_materialu = c.id_materialu) and nazov='".$_GET['hodnota']."'") or print ("chyba <br />" .$a."<br />".mysql_error());
while($row=mysql_fetch_array($vyber))
		{
		$popis=substr($row['popis'], 0, 120);
		echo "<tr>";
		echo "<td>".$row['id_tovaru']. "</td>";
		echo"<td><img src=".$row['obrazok']." alt=".$row['obrazok_alt']." align='left'></td>";
		echo "<td>".$row['nazov']. "</td>";
		echo "<td>".$row['autor']. "</td>";	
		echo "<td>".$popis. "</td>";
		echo "<td>".$row['cena']. "</td>";
		echo "<td>".$row['zlava']. "</td>";
		echo "<td>".$row['nova_cena']. "</td>";
		echo "<td>".$row['farba']. "</td>";
		echo "<td>".$row['material']. "</td>";		
		echo "</tr>";
echo"</table>";

?>
Nox
Profil
při vkládání do DB dotazu na proměnnou použij mysql_real_escape_string()
kokolino
Profil *
Nox:
myslel si to takto
nazov='".mysql_real_escape_string($_GET['hodnota'])."'
iUnlimited
Profil *
Já používám tohle:

function securedata($mensaje) {
  $mensaje = trim($mensaje);
  $mensaje = str_replace("&","&amp;",$mensaje);
  $mensaje = str_replace(">","&gt;",$mensaje);
  $mensaje = str_replace("<","&lt;",$mensaje);
  $mensaje = str_replace("'","'",$mensaje);
  $mensaje = str_replace("\"","&quot;",$mensaje);
  $mensaje = mysql_real_escape_string($mensaje);
  return $mensaje;
}

securedata("<script>alert('zlý script');</script>");

Je to aji proti Scriptům, PHP a HTML. Takže ztoho bude jenom čistý text.

Moderátor Joker: Kód vrácen zpátky poté co jsem ho předtím vyhodil. Sice mi nepřipadá dobrý, ale nakonec problém řeší
blizzboz
Profil
alebo použi dibi a dibi to porieši za teba ale musíš to zapisovať takto:
dibi::query('SELECT * FROM tabulka WHERE id = %i', $_POST['id']);

v žiadnom prípade nepouživaj tento zápis:
dibi::query('SELECT * FROM tabulka WHERE id = {$_POST["id"]}');
bo v tom prípade to escapovanie dibi nepoužije.
Joker
Profil
iUnlimited:
Eh, omluva, nepodíval jsem se na ten kód pořádně. Problém to nakonec řeší, takže to není mimo téma. Vrátil jsem ho zpátky a vyhodil svůj příspěvek kde píšu, proč jsem ho vyhodil :-)

Přesto bych nedoporučil to řešit takhle.
1. Je zbytečné ošetřovat HTML sérií str_replace, když PHP má funkci htmlspecialchars
2. Krom toho str_replace apostrofu na apostrof je úplně zbytečné
3. Hlavně ale: K čemu ta funkce vlastně je dobrá? Data je nutné ošetřit pro ten výstup kam se posílají, ne pro všechno naráz. Tj. když to chci uložit do databáze, potřebuji escapování pro databázi, ne ještě navíc udělat trim a zaentitovat HTML. Když chci vypisovat text do HTML, potřebuji zaentitovat HTML, ne ještě navíc udělat trim a escapovat to pro databázi.
Radovan789
Profil *
Joker:
A co chceš Escapovat když se ti " a ' převede na HTML entitu... (Beru to jako pro vstup), takže je něco špatné když do databáze uložím html entity ?

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: