Avatar billede jakobdo Ekspert
25. marts 2004 - 10:26 Der er 9 kommentarer og
3 løsninger

Sikre at min side ikke udnyttes.

Jeg er ved at lave en hjemmeside, hvor f.eks. nyheder oprettes på siden: OpretNyhed.php

Når de så har sat deres nyhed ind og f.eks. trykket Opret Nyhed.
Så lægges deres nyhed i min database.

Men når den så vises under siden: nyheder.php, så kunne en person jo have lavet:

java script:location.href="www.jubii.dk"
Eller noget i den stil.

Eller </table> og så ødelægge mit design...

Hvordan omgås jeg dette???
Avatar billede domaz.dk Novice
25. marts 2004 - 11:06 #1
str_replace("&", "&amp;", $str);
$str = str_replace("<", "&lt;", $str);
$str = str_replace(">", "&gt;", $str);
addslashes($str);

$str skal så erstattes af den variabel som du bruger
Avatar billede domaz.dk Novice
25. marts 2004 - 11:07 #2
ups....

$str = str_replace("&", "&amp;", $str);
$str = str_replace("<", "&lt;", $str);
$str = str_replace(">", "&gt;", $str);
$str = addslashes($str);
Avatar billede jakobdo Ekspert
25. marts 2004 - 11:08 #3
Er det nok til at sikre mit input/output?
Hvad vis man bruger noget unicode?
Avatar billede domaz.dk Novice
25. marts 2004 - 11:14 #4
ja... det sikrer ihvertfald at der ikk bliver lavet nogle scripts eller html koder...
men den skal laves lidt om hvis du os skal bruge den til output...

//input
funktion text_input($str) {
$str = str_replace("&", "&amp;", $str);
$str = str_replace("<", "&lt;", $str);
$str = str_replace(">", "&gt;", $str);
$str = addslashes($str);
return $str;
}

//output
funktion text_output($str) {
$str = str_replace("&amp;", "&", $str);
$str = str_replace("&lt;", "<", $str);
$str = str_replace("&gt;", ">", $str);
$str = stripslashes($str);
return $str;
}
Avatar billede domaz.dk Novice
25. marts 2004 - 11:19 #5
men hvis du vil have en lidt mere avanceret en kan du bruge den her...


function text_format($str, $target="_blank", $css_class="", $fixlongword = 0) {
    $str = str_replace("&", "&amp;", $str);
    $str = str_replace("<", "&lt;", $str);
    $str = str_replace(">", "&gt;", $str);
    $str = text_url($str, $target, $css_class);
    $str = text_email($str, $css_class);
    $str = text_fix_endchar($str);
    $str = str_replace("  ", "&nbsp; ", $str);
    $str = str_replace("\t", "&nbsp;&nbsp;&nbsp; ", $str);
    $str = str_replace("\r", "", $str);
    $str = str_replace("\n", "<br>", $str);
       
    if ($fixlongword != 0) $str = text_fix_longword($str, $fixlongword);
   
    $str = addslashes($str);
   
    return $str;
}


function text_url($str, $target, $css_class) {
    $ins_str = "";
    if ($css_class) $ins_str .= " class=\"".$css_class."\"";
    if ($target) $ins_str .= " target=\"".$target."\"";
    $str = tagster_expand($str);
    $str = preg_replace ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\"\\1://\\2\"".$ins_str.">\\1://\\2</a>", $str);
    $str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(www\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"http://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
    $str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(ftp\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"ftp://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
    return text_reduce($str);
}


function text_email($str, $css_class="") {
    $ins_class = "";
    if ($css_class) $ins_class = " class=\"".$css_class."\"";
    $str = tagster_expand($str);
    $str = preg_replace ("/([\s\"])([\w\.\-_]+)@([\w\-_]+)\.([\w\.\-_]+)/i", "\\1<a href=\"mailto:\\2@\\3.\\4\"".$ins_class.">\\2@\\3.\\4</a>", $str);
    return text_reduce($str);
}


function text_fix_endchar($str) {
    $str = preg_replace ("/([\'\"\)\]\.\,\?\!]+)\">/i", "\">", $str);
    $str = preg_replace ("/([\'\"\)\]\.\,\?\!]+)\" (target|class)=\"/i", "\" \\2=\"", $str);
    $str = preg_replace ("/([\'\"\)\]\.\,\?\!]+)<\/a>/i", "</a>\\1", $str);
    return $str;
}

function text_fix_longword($str, $maxlen = 10) {
    $sw = 0;
    $in_tag = false;
    $str_size = strlen($str);
    $res = "";

    for ($i=0; $i<$str_size; $i++){
        if ($str[$i] == '<') $in_tag = true;
        else if ($str[$i] == ' ') $sw = 0;

        if (!$in_tag && (($sw++) > $maxlen)) {
            $res .= '&shy;';
            $sw = 0;
        }
           
        if ($str[$i] == '>') $in_tag = false;
        $res .= $str[$i];
    }
       
    return $res;
}

function text_expand($str) {
    return " ".$str." ";
}

function text_reduce($str) {
    return substr($str, 1, -1);
}
Avatar billede Slettet bruger
25. marts 2004 - 11:38 #6
Hvorfor lave sine egne funktioner når PHP har indtil flere indbygget?

Kig på htmlspecialchars http://dk.php.net/manual/en/function.htmlspecialchars.php og htmlentities http://dk.php.net/manual/en/function.htmlentities.php
Avatar billede jakobdo Ekspert
25. marts 2004 - 12:00 #7
Kan du så give mig en simpel sikker løsning med de indbyggede php funktioner?
Avatar billede Slettet bruger
25. marts 2004 - 12:37 #8
Ja da, bare se her:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
</head>

<body>

<?
$var = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
</head>

<body>



</body>
</html>';

echo htmlentities($var);

?>

</body>
</html>

Prøv at kigge i kildekoden, så kan du se at alle "farlige" tegn er lavet om til ufarlige tegn.

Lidt i stil med det domaz.dk bruger 200 linier på ;)
Avatar billede domaz.dk Novice
25. marts 2004 - 20:02 #9
arg... den funktion laver så os alle url's om til links og deler ord op o.s.v.... ;)
Avatar billede Slettet bruger
25. marts 2004 - 21:20 #10
Øh...nej, men det var jo heller ikke spørger der ville have det, men noget du kom med uopfordret.
Avatar billede jakobdo Ekspert
26. marts 2004 - 08:36 #11
Domaz.dk, hvordan bruger jeg dine funktioner?
Skal jeg bruge text_format() når jeg lægger teksten i databasen?
Og så bare trække teksten normalt ud?
Avatar billede jakobdo Ekspert
26. marts 2004 - 09:35 #12
Har fundet ud af det...
domaz.dk, din udbyggede function virker fint, dog skulle disse 2 lige ændres:
tagster_expand($str);
til:
text_expand($str);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester