Autor Zpráva
Petra Sivá
Profil *
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
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
* a htmlspecialchars() používat jen při výpisu, ne před uložením do databáze.
Petra Sivá
Profil *
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
Můžeš to použít všude, klidně u svojí vlastní proměnné :)
Alphard
Profil
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 *
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
Jistě, ale viz [#6].
Petra Sivá
Profil *
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
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">
...
Pokud máte post, pak použijete $_POST, jinak $_GET.

Použijte raději $_POST.

Mimochodem, spolužačky? Zajímalo by mne, kolik je zde slečen, které programují :)
Joan
Profil
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 *
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">
vy tam máte místo method napsané action, to ste se překlikl nebo to mám zase špatně já?
mattyZEM
Profil
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 *
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
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 *
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
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
[#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 *
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 *
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
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 *
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
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
Petra Sivá:
echo "<p>Dotazník byl úspěšně odeslán.</p>"
A tohleto funguje? Vždyť vám tam chybí ;
baklazan
Profil
sarojan:
ano kedze tam je ?>
Petra Sivá
Profil *
mattyZEM:
Proč do MySQL ukládat PHP kód?
No, kdybych byl nějaký záškodník :-)
Nox
Profil
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
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 *
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.

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:

0