webForumDet fria alternativet

htmlspecialchars och php

7 svar · 2 015 visningar · startad av biggles-1

biggles-1Medlem sedan jan. 2005122 inlägg
#1

nitro2k01 skrev i ett inlägg till mig att " ..... alltid köra användardata som skrivs ut genom htmlspecialchars, både för att undvika problem om ett fält innehåller t ex ett citationstecken, och för att förhindra attacker där någon lyckas peta in Javascript-kod eller annat."

Bra synpunkt tycker jag och vill nu applicera detta, men är osäker på om jag gör rätt.

Så här har jag gjort:

<?php
$poststring .= "<input type='hidden' name='$key' value='htmlspecialchars($val)' />";
?>

Detta får jag ut:

<pre>Array
(
    [BuyerFirstName] => htmlspecialchars(Nils)
    [BuyerLastName] => htmlspecialchars(XXXXXXXX)
    [BuyerEmail] => htmlspecialchars(test@clientdomain.se)
    [RefNr] => 8898
    [Cost] => htmlspecialchars(37)
    [AgentID] => 9999
    [Description] => Beställning gjord hos xxxxxxxxxx
    [SellerEmail] => order@mindomain.se
    [ExtraCost] => 0
    [OkUrl] => http://www.mindomain.se/verify.php
    [CancelUrl] => http://www.mindomain.se/test-ssc/error.php
    [MD5] => 5edeabb5bfb3e77222bf66e8a0a990dcf
    [GuaranteeOffered] => 1
)
</pre>

Kan en mottagare som endast förväntar sig informationen UTAN texten "htmlspecialchars", använda parametrarna?

Skall jag göra på något annat sätt?

mvh Nils

EDIT: Har testat mot Paysons testsida, som inte tar emot informationen!

ercizMedlem sedan maj 20011 880 inlägg
#2

htmlspecialchars är en PHP-funktion och måste anropas av php. Skriver man som du har skrivit så kan man bara skriva ut variabler och inte anropa funktioner.

Prova med detta istället:

<input type="hidden" name="<?php echo $key; ?>" value="<?php echo htmlspecialchars($val); ?>" />
biggles-1Medlem sedan jan. 2005122 inlägg
#3

Hej,

Min hjärnan har nog gått varm för du har helt rätt och jag tänkte helt fel, men får det ändå inte att fungera.

Så här ser den fungerande koden ut innan jag vill ändra den:

<?php
$poststring = '';
	foreach($fields AS $key => $val){
	$poststring .= "<input type='hidden' name='$key' value='($val)' />";
	 }
	?>

Detta fungerar inte efter att jag satt in erciz kod:

<?php
$poststring = '';
	foreach($fields AS $key => $val){
	$poststring .= "<input type="hidden" name="<?php echo $key; ?>" value="<?php echo htmlspecialchars($val); ?>" />;
	 }
	?>

Var sätts php-sluttagg innan name="" och var sätts sedan starttagen igen?

Ser även att citationstecken används istället för apostrofer, men skall vad jag förstår inte spela någon roll.

Vad missar jag? / Nils

bassebhuMedlem sedan nov. 20014 028 inlägg
#4
<?php
$poststring = '';
foreach($fields AS $key => $val) {
  $poststring .= '<input type="hidden" name="' . $key . '" value="' . htmlspecialchars($val) . '" />';
}
?>
biggles-1Medlem sedan jan. 2005122 inlägg
#5

bassebhu,

Tack för snabba besked, du är en pärla!

Koden rinner igenom utan några problem (peppar, peppar ta i trä) så lösningspoängen går till dig!

Ha en trevlig kväll! / Nils

ercizMedlem sedan maj 20011 880 inlägg
#6

biggles-1 skrev:

Ser även att citationstecken används istället för apostrofer, men skall vad jag förstår inte spela någon roll.

Jag tror att citationstecken är det korrekta när det gäller HTML.

biggles-1Medlem sedan jan. 2005122 inlägg
#7

Hej erciz,

Ingen skugga över dig, ledsen om du fick det intrycket. Jag ställde en fråga om just detta i veckan, därav min reflektionen.

http://http://www.webforum.nu/showthread.php?t=182907

Ha en go kväll / Nils

voigtann1Medlem sedan juni 20018 810 inlägg
#8

erciz skrev:

Jag tror att citationstecken är det korrekta när det gäller HTML.

Tyvärr är det bara XHTML som " är korrekt, ' är ok att använda (även om jag tycker det se för hemskt ut att använda sig av).

Genererad på 377 ms · cache AV · v20260730165559-full.f96bc7eb