Autor | Zpráva | ||
---|---|---|---|
Petra Sivá Profil * |
#1 · Zasláno: 30. 5. 2010, 23:52:15
Dobrý den,
chci se zeptat jak se jmenuje taková ta "věc", která mi upraví kód z formuláře (textarea) aby mi tam někdo místo normálního textu nepsal nějaký škodlivý kód. Chci to ukládat do databáze. Děkuju |
||
Majkl578 Profil |
#2 · Zasláno: 30. 5. 2010, 23:57:18
Té „věci“ se říká funkce. :) Pro ošetření proti SQL injection (útok na databázi) mysql_real_escape_string() (v případě mysql) a proti XSS útokům htmlspecialchars().
|
||
joe Profil |
#3 · Zasláno: 30. 5. 2010, 23:58:55
* a htmlspecialchars() používat jen při výpisu, ne před uložením do databáze.
|
||
Petra Sivá Profil * |
#4 · Zasláno: 31. 5. 2010, 00:12:39
Jo pardon, ja sem to napsala blbě. já vím, co je funkce, jenom jsem si na to nemohla vzpomět :-)
na tom odkazu jsem si našla tuto funkci: <?php function safe($value){ return mysql_real_escape_string($value); } ?> <?php $name = safe($_POST["name"]); $password = safe($_POST["password"]); ?> vypadá jednoduše. Můžu to použít ikdyž tam nemám POST ale REQUEST? |
||
mattyZEM Profil |
#5 · Zasláno: 31. 5. 2010, 00:14:14
Můžeš to použít všude, klidně u svojí vlastní proměnné :)
|
||
Alphard Profil |
#6 · Zasláno: 31. 5. 2010, 00:14:46
Petra Sivá:
„Můžu to použít ikdyž tam nemám POST ale REQUEST?“ Můžete, ale nenapadá mě moc důvodů, proč používat request. |
||
Petra Sivá Profil * |
#7 · Zasláno: 31. 5. 2010, 00:23:50
No, ja mám dotazník v formular.php a mám nastavené action="odeslat.php" a v tom odeslat php mám třeba $zaliby = $REQUEST["zaliby"]. takže do toho odeslat.php dám na začátek tu funkci
<?php function safe($value){ return mysql_real_escape_string($value); } ?> a potom tam teda dám $zaliby = safe($_REQUEST["zaliby"]); je to tak správně? |
||
mattyZEM Profil |
#8 · Zasláno: 31. 5. 2010, 00:24:31
Jistě, ale viz [#6].
|
||
Petra Sivá Profil * |
#9 · Zasláno: 31. 5. 2010, 00:26:57
No, já se musím přiznat že jsem to zkopírovala od spolužačky. takže nevím, proč tam mám REQUST a vy tam máte POST.
|
||
mattyZEM Profil |
#10 · Zasláno: 31. 5. 2010, 00:29:22 · Upravil/a: mattyZEM
Nemusí tam být ani POST, může tam být i GET...
Ale imho POST je nejlepší varianta... <form action="nekam.php" method="POST/GET"> ... Použijte raději $_POST. Mimochodem, spolužačky? Zajímalo by mne, kolik je zde slečen, které programují :) |
||
Joan Profil |
#11 · Zasláno: 31. 5. 2010, 00:33:32
mattyZEM:
Mimochodem, spolužačky? Zajímalo by mne, kolik je zde slečen, které programují :) A musí to být jen a pouze "slečny" ;-) ? |
||
mattyZEM Profil |
Joan:
„A musí to být jen a pouze "slečny" ;-) ?“ Nejlépe slečny :-) Moderátor Alphard: Zůstaňme u PHP, nejsme seznamka. :-)
|
||
Petra Sivá Profil * |
#13 · Zasláno: 31. 5. 2010, 00:36:44
Dělám dotazník k bakalářce a učitel nám řekl, že rozesílat dotazník ve wordu je oničem a že když to pošleme jako dotazník na webu, že dostaneme body navíc. A taky že prý se nám to bude lépe zpracovávat když to budeme mít v tabulce v databázi než aby sme to dávali dohromady z těch wordovských dokumentů.
<form id="dotaznik" name="dotaznik" method="post" action="odeslat.php"> |
||
mattyZEM Profil |
#14 · Zasláno: 31. 5. 2010, 00:39:16 · Upravil/a: mattyZEM
Alphard:
„Zůstaňme u PHP, nejsme seznamka. :-)“ Copy that :-( Petra Sivá: „to ste se překlikl nebo to mám zase špatně já“ Velmi se omlouvám, já jsem se přepsal, již opraveno. Pokud by jste potřebovala pomoci, napište mi na ICQ, mám ho v profilu. |
||
Petra Sivá Profil * |
#15 · Zasláno: 31. 5. 2010, 00:42:39
Děkuju všem za pomoc. Mějte se tu hezky a jen tak dál. Je od vás milé, že pomáháte druhým lidem. Tak ať se daří. pa
|
||
mattyZEM Profil |
#16 · Zasláno: 31. 5. 2010, 00:46:36
Petra Sivá:
„Je od vás milé, že pomáháte druhým lidem.“ Jakmile se zaregistrujete, již není cesty zpět... :-) Já pokud potřebuji pomoci, také tu napíši, takže to také musím nějak oplácet :-). |
||
Petra Sivá Profil * |
#17 · Zasláno: 31. 5. 2010, 01:02:12
A sem tu zase :-) REQUEST jsem předělala na POST a všude kde může uživatel něco napsat, tak jsem tam dala tu funkci SAFE. Zkoušela jsem do textového pole vložit nějaký php kód a když jsem se dívala do databáze, tak mi to neuložilo nic. Je to tak správně? Já myslela, že to prostě převede na nějaké "klikyháky" ale aspoň tam něco zapíše.
|
||
mattyZEM Profil |
#18 · Zasláno: 31. 5. 2010, 01:06:09 · Upravil/a: mattyZEM
Ne, toto není zápis do databáze. Máte založenou databázi? Pak jen stačí:
$vloz=mysql_query("INSERT INTO tabulka (sloupec1, sloupec2, sloupec3) VALUES ('$promenna1','$promenna2','$promenna3')"); Také nesmíte zapomenout na mysql_connect() a mysql_select_db() Majkl578: „Drž se prosím tématu, seznamka je jinde.“ Již jsem byl poučen Vaším kolegou, ale děkuji za připomenutí, už se to nestane... |
||
Majkl578 Profil |
#19 · Zasláno: 31. 5. 2010, 01:06:43 · Upravil/a: Majkl578
[#16] mattyZEM:
Drž se prosím tématu, seznamka je jinde. [#17] Petra Sivá: Ta funkce pouze ošetří řetězec tak, aby nešlo daný vstup zneužít. Pokud se nic nezapíše, zřejmě máš chybu v SQL dotazu. Pokud sem dáš celý vadný kód, dokážeme poradit konkrétněji. Lze použít i hotové řešení nebo se inspirovat jinde. |
||
Petra Sivá Profil * |
#20 · Zasláno: 31. 5. 2010, 01:13:53
já jsem to řekla špatně. Mě to všecko fungovalo. Vše se mi zapisovalo do databáze. Jenom teď, když jsem tam přidala tu funkci, tak to nejde.
<?php mysql_connect("localhost", "r08022", "heslo"); mysql_select_db("r08022"); mysql_query("SET CHARACTER SET utf8"); mysql_query("SET NAMES utf8"); function ochrana($value){ return mysql_real_escape_string($value); } ; $datum = Date("Y/m/j H:i:s", Time()); $ip = $_SERVER['REMOTE_ADDR']; $pohlavitazatele = $_POST['pohlavitazatele']; $vek = ochrana($_POST['vek']); $zaliby = ochrana($_POST['zaliby']); mysql_query("INSERT INTO dotaznik (datum, ip, pohlavitazatele, vek, zaliby) VALUES ('$datum', '$ip', '$pohlavitazatele', '$vek', '$zaliby')"); echo "<p>Dotazník byl úspěšně odeslán.</p>" ?> |
||
Petra Sivá Profil * |
#21 · Zasláno: 31. 5. 2010, 01:15:34
Majkl578:
„Lze použít i hotové řešení nebo se inspirovat jinde.“ Já to mám už všechno hotové a fungovalo mi to do chvíle, než jsem tam dala tu funkci. |
||
mattyZEM Profil |
#22 · Zasláno: 31. 5. 2010, 01:23:25 · Upravil/a: mattyZEM
Upravte řádek 19 na:
mysql_query("INSERT INTO dotaznik (datum, ip, pohlavitazatele, vek, zaliby) VALUES ('$datum', '$ip', '$pohlavitazatele', '$vek', '$zaliby')") or die(mysql_error()); |
||
Petra Sivá Profil * |
#23 · Zasláno: 31. 5. 2010, 01:26:19
Už jsem na to přišla. zkopírovala jsem tam ten můj původní soubor a zkusila tam do všech textarea vložit php kod a taky to nic neuložilo, ale normální text ano. Je možné, že je to ještě nějak chráněné, když je to školní server?
|
||
mattyZEM Profil |
#24 · Zasláno: 31. 5. 2010, 01:37:23
Petra Sivá:
„Je možné, že je to ještě nějak chráněné“ To už je mimo mé znalosti. „normální text ano“ Proč do MySQL ukládat PHP kód? |
||
sarojan Profil |
#25 · Zasláno: 31. 5. 2010, 06:40:57
Petra Sivá:
„echo "<p>Dotazník byl úspěšně odeslán.</p>"“ A tohleto funguje? Vždyť vám tam chybí ; |
||
baklazan Profil |
#26 · Zasláno: 31. 5. 2010, 06:42:32
sarojan:
ano kedze tam je ?> |
||
Petra Sivá Profil * |
#27 · Zasláno: 31. 5. 2010, 07:45:57
mattyZEM:
„Proč do MySQL ukládat PHP kód?“ No, kdybych byl nějaký záškodník :-) |
||
Nox Profil |
#28 · Zasláno: 31. 5. 2010, 07:51:46 · Upravil/a: Nox
Za funkcí je nadbytečný středník
Jestli to nenapsalo žádnou chybu, dej na začátek skriptu error_reporting(E_ALL); ------- Jestli "zkusila tam do všech textarea vložit php kod" znamená 'do kódu stránky, ne v prohlížeč', tak to bude tím, že PHP se prostě provede na serveru a prohlížeči pošle jen výsledek (výstup), pokud kód v textearea neměl výstup, neposlalo se nic a pak si odeslala prázdný formulář => nic se neuloží Pokud se to napíše do textarea v prohlížeči, vložit by se to mělo Každopádně by to nemělo být záškodníkovi k ničemu, kód z DB by se ještě musel dát to eval() ... což je fuj stejně ------- Neupravuješ $_POST["pohlavi"], na pohlaví a věk by se místo mysql_real_escape_string() hodilo intval(). |
||
Majkl578 Profil |
#29 · Zasláno: 31. 5. 2010, 15:36:40
Nox:
„Za funkcí je nadbytečný středník“ Kupodivu to není chyba, nezpůsobuje to parse error. Je to podobné tomuto (také funkčnímu): function x() { ; } .
|
||
Petra Sivá Profil * |
#30 · Zasláno: 31. 5. 2010, 19:46:46
Nox:
„Každopádně by to nemělo být záškodníkovi k ničemu, kód z DB by se ještě musel dát to eval() ... což je fuj stejně“ Tak je potřeba tam dávat tu funkci SAFE, když to jenom uložím do databáze a pak si to vyexportuju do excelu. Jako že to nikde z té databáze nezobrazuju znovu v php. |
||
Časová prodleva: 14 let
|
0