Mai nap egy érdekes hibába futottam. Szerintem többeknek ismerős lesz.
$result = mysql_query("INSERT INTO article (
articleID,
title,
type,
date,
content)
VALUES (null,
'$title',
'$type',
NOW(),
'$content')");
Mindössze annyit szerettem volna, hogy egy táblába html formra beírt adatot letárolok. Teszteltem és észrevettem, hogy van egy szöveg amit nem "szeret". mysql_error() szerint olyankor szintax hibát vétek. Hamar rájöttem a szövegben lévő ' (aposztrof) okozza a gondot. Ugyanis annak hatására szegény azt gondolja, hogy ott van vége a szövegnek és ami utána jön már kódként értelmezi ami nyílván szintaktikai hibához vezet.
Ez csak szerintem súlyos? Nyílván ezt kihasználva rosszindulatú emberek akár adatokat is tudnak lopni. Nyílván ha tudom, akkor teszek valamit ellene. Viszont kinek a felelőssége ez? Ha ilyen vagy ehhez hasonló ok baj van akkor a programozót veszik elő, pedig szerintem a nyelv bugyuta.
- 1984 megtekintés
Hozzászólások
- A hozzászóláshoz be kell jelentkezni
Nem a nyelv bugyuta, oda kell figyelni a használatára. :-&
Gugli --> MySQL injection
pl:
http://en.wikipedia.org/wiki/SQL_injection
http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php
http://prog.hu/tudastar/86003-13/Vedekezes+xss+xsr+es+mysql+injection+e…
Ja, és igen, a programozó hibája, ha ezt nem megfelelően kezeli!
- A hozzászóláshoz be kell jelentkezni
Megnéztem, javítottam és valóban így rendben van. Köszönöm! Egyetértek, hogy valóban a programozó hibája ha ebből baj van. Inkább átfogalmazom amit az előbb írtam: Talán jobb lenne a php, ha nem adna lehetőséget erre.
- A hozzászóláshoz be kell jelentkezni
Erre minden nyelv lehetőséget ad.
- A hozzászóláshoz be kell jelentkezni
Ez azt hiszem, szemlélet kérdése. Egy nyelv próbálhat kivédeni minden programozói trehányságot, figyelmetlenséget, de sok lehetőségtől is meg leszel fosztva, vagy rád bízza, hogy eldöntsd, hogy az adott eljárás a számodra hogy biztonságos. Pl. futtathatsz egy eval($_GET["akármi"])-t, csak tudnod kell, mi az, és meg akarsz-e bízni a kintről érkező kódban, vagy nem.
- A hozzászóláshoz be kell jelentkezni
Ez a barátod: mysql_real_escape_string
- A hozzászóláshoz be kell jelentkezni
Üdvelet!
Hál istennek a MySQL Improved már tartalmazza (többek között a Java-hoz hasonlóan) a prepared statement-ek használatát.
Bővebben:
http://hu2.php.net/manual/en/mysqli-stmt.bind-param.php
--
Üdv,
ZebraZ
- A hozzászóláshoz be kell jelentkezni
Én inkább a PDO híve vagyok, mint a mysqli-é.
Azelőtt pedig egy bind param emulátor függvénnyel dolgoztam.
- A hozzászóláshoz be kell jelentkezni
"Viszont kinek a felelőssége ez?"
ez elég egyértelmű: a programozóé aki nem készül fel az ilyen eshetőségekre.
- A hozzászóláshoz be kell jelentkezni
LISA framework?
Érdekelne.
Benne vagy a projektben?
- A hozzászóláshoz be kell jelentkezni
privi ment.
- A hozzászóláshoz be kell jelentkezni