Du kan väl helt enkelt ta bort dessa innan de läggs in i databasen? Även fast du har den som entities i dina hidden fields så kan du ju köra en html_entity_decode() innan du slänger in det i databasen!
// Nippe
9 svar · 362 visningar · startad av bassebhu
Hej!
När man postar ett formulär vill jag först att det ska komma upp en granskningssida. Då har jag gjort så att formulärsdatat skrivs ut på sidan med htmlentities för att den inte ska reagera på html.
Nu vill jag sedan skicka iväg dessa data till databas och lägger därför variablerna i hidden fields och skickar i nytt form till spara-i-databasen-sidan.
Nu uppstår problemet. Jag har läst att man helst inte ska sätta entities innan man sparar till databasen...? hur ska jag lösa det i annat fall om jag vill ha det här mellanläget med granskning, men ändå vill ha entities för att inget ska gå fel längs vägen..?
Gjorde en sök på entities men fann inget om just det här.. =/
Tack!
Du kan väl helt enkelt ta bort dessa innan de läggs in i databasen? Även fast du har den som entities i dina hidden fields så kan du ju köra en html_entity_decode() innan du slänger in det i databasen!
// Nippe
Man brukar ju köra in uppgifter i databasen som den är för att det är enklare att plocka ut den om man ska redigera texten.
Men med tanke på säkerhet och sådant så ska man ju passa sig med tanke på XSS (cross site scripting) och SQL injectons mm så detta är något man kanske bör tänka mer på.
Har funderat en hel del på detta på sistone och hittat Mattes lilla funktioner, men har ännu inte funderat igenom om dom är 100 procentiga men du kan ju testa hur den funkar. ;)
Mattes kod:
<?php
/*
Funktion som rensar texten från html-taggar
samt gör om tecken typ Å,Ä,Ö,& m.fl till entiteter.
Rensar även från radslutstecken och mellanslag
i början och slutet av texten.
Byter också ut radslutstecken i texten mot <br />.
ENT_QUOTES betyder att man även byter ut ' mot ' .
Byter även ut tecknet | (124) eftersom jag brukar använda
det som skiljetecken i textfiler.
Används:
$text = cleanText($text);
*/
function cleanText($text){
$text = htmlentities ($text, ENT_QUOTES);
$text = stripslashes($text);
$text = trim($text);
$text = str_replace("|", "|", $text);
$text = preg_replace("/(\r\n|\r|\n)/", "<br />", $text);
return $text;
}
/*
Kör ovanstående funktion baklänges. Kan användas om man
t.ex i ett admin-skript vill gå in och ändra det som är
kört genom ovanstående funktion och sparat.
Uppmärksamma personer kanske ser att jag snott
huvuddelen av denna nästan rakt av från manualen. :-)
Används:
$text = uncleanText($text);
*/
function uncleanText($text){
$trans_tbl = get_html_translation_table(HTML_ENTITIES);
$trans_tbl = array_flip($trans_tbl);
$text = str_replace("'", "'", $text);
$text = str_replace("|", "|", $text);
$text = str_replace("<br />", "\r\n", $text);
return strtr($text, $trans_tbl);
}
?>
Addslashes lägger ju till ett snedstreck framför ', ", \, och NULL.
Detta görs ju automatiskt om Magic_gpc_quotes är On men kan man köra för mycket för att vara säker?
Har funderat ganska mycket den sista veckan ang. säkerhet och sådant men har själv en del frågor som jag söker svar på.
Kan för övrigt tipsa dig om PHP portalens artikel om säkerhet och php.
http://www.phpportalen.net/wiki/index.php?page=PHP+och+s�kerhet
tack :) ska läsa...
men som jag förstår det ska mattes script användas innan man sparar till databas. och då följer man ju inte det rekommenderade att inte röra infot innan man sparar till databas! :o
Begriper inte vad problemet är egentligen. Om du mellanlagrar din data i ett hidden-field (datan körd genom htmlentities()) och submittar formuläret så får du ju korrekt htmlkod skickad från formuläret
Ta följande kod som exempel:
<?php
if(isset($_POST['data']))
$data = $_POST['data'];
else
$data = '';
?>
<form method="post" action="?">
<textarea name="data"><?php echo htmlentities($data);?></textarea>
<input type="submit">
</form>
<?php echo $data;?>
Dvs, $data kommer alltid att innehålla icke bearbetad htmlkod.
japp. men när jag sedan på nästa sida skickar iväg:
<textarea name="data"><?php echo htmlentities($data);?></textarea>
så kommer det som htmlentities-omvandlat till sidan jag ska spara i databasen. och det var som sagt det jag läste man helst skulle undvika. men jag spanar in den här funktionen html_entity_decode() så länge...
tycker ändå att det verkar som att mattes script är tänkt att spara info som omvandlat i databasen ;)
Funktionen är gjord en gång i tiden för att spara ned på en rad i en textfil :)
Som jag ser det idag är den ganska så overkill.
Men som Peeer säger, html_entity_decode() har du ingen som helst anledning att köra då den omvandlingen du gör med html_entity_decode() görs automatiskt när du postar formuläret.