Avatar billede plaq Nybegynder
13. juli 2005 - 13:52 Der er 11 kommentarer og
1 løsning

hvorfor virker det ikke

hej jeg har bøvlet med det her et par dage om kan ikke komme rundt om det....    jeg bruger normalt dette lille script
<?php
if(file_exists('inc/'.$_GET['side'].'.php')) {
include('inc/'.$_GET['side'].'.php');
} else {
include('inc/nyheder.php');
}
?>

men nu er jeg ved at lave sådan jeg at kan opdatere mine tekster på siden men det funker ikke tror det har noget med dette script at gøre    se mere http://www.eksperten.dk/spm/631809
Avatar billede xyborx Nybegynder
13. juli 2005 - 14:33 #1
Du glemmer igen det som jaw spørger efter:
"Hvad er det, der ikke virker? Fejlmeddelelser eller lign.?"
Du efterlader jo heller ikke en bil hos en mekaniker med beskeden "Den virker ikke. Jeg tror det er noget med motoren"

Når det så er sagt, er det et halvfarligt stykke kode du bruger der. Du giver folk mulighed for at køre enhver php fil på serveren. Du skal huske altid at validere og uskadeliggøre brugerinput.
Avatar billede plaq Nybegynder
13. juli 2005 - 14:37 #2
den sender mig ud på forsiden med alt det fra form fyldt op i adresse linien således 

www.hvr.dk+%29%2C+der+er+brancheorganisation+for+mere+end+20.000+danske+virksomheder.+H%E5ndv%E6rksr%E5det+har+v%E6ret+medejer+siden+virksomhedens+overgang+til+selskabsform.%0D%0A%0D%0ARST+ApS+bestyrelse+best%E5r+af+virksomhedens+daglige+ledere.%0D%0A+%0D%0ARing+til+os+og+h%F8r+n%E6rmere+p%E5+telefon++%2B45+4457+0088.test&id=1&upload=tryk+nyhed" target="_blank">http://www.plaq.dk/index.php?title=Profil+af+RST+ApS&text=RST+ApS+er+f%F8rende+totalleverand%F8r+af+v%E6rdiskabende+virksomhedsl%F8sninger.+Et+skarpt+fokus+p%E5+brancherne+auto+og+autolakering%2C+samt+mange+%E5rs+erfaring+med+generelle+virksomhedsl%F8sninger+sikrer+et+indg%E5ende+kendskab+til+vores+kunders+forretning.+%0D%0A+%0D%0ARST+ApS+er+SAP+Business+Partner+og+har+arbejdet+med+SAP+siden+2003.+RST+ApS+blev+grundlagt+i+1989+og+har+h%F8jtudviklede+kompetencer+inden+for+programmering%2C+udvikling+og+implementering+af+virksomhedsl%F8sninger.+%0D%0A+%0D%0ARST+ApS+har+adresse+i+Grindsted%2C+Ribe%2C+K%F8benhavn+og+Sandefjord+i+Norge.+Kontoret+i+Norge+blev+etableret+i+%E5r+2001.%0D%0A+%0D%0ARST+ApS+ejerkreds+best%E5r+blandet+andet+af+H%E5ndv%E6rksr%E5det%0D%0A%28+www.hvr.dk+%29%2C+der+er+brancheorganisation+for+mere+end+20.000+danske+virksomheder.+H%E5ndv%E6rksr%E5det+har+v%E6ret+medejer+siden+virksomhedens+overgang+til+selskabsform.%0D%0A%0D%0ARST+ApS+bestyrelse+best%E5r+af+virksomhedens+daglige+ledere.%0D%0A+%0D%0ARing+til+os+og+h%F8r+n%E6rmere+p%E5+telefon++%2B45+4457+0088.test&id=1&upload=tryk+nyhed

og det får jeg ikke så meget ud af..
Avatar billede plaq Nybegynder
13. juli 2005 - 14:52 #3
hvorfor gør den dette ??
Avatar billede plaq Nybegynder
13. juli 2005 - 14:54 #4
jeg har prøvet lidt af hvert men her er koden som den ser ud nu...

<TABLE WIDTH='100%' cellspacing='0' border='0'>

<?
include("config.php");
if (isset($_POST[upload])) {
$query = mysql_query("UPDATE indhold  SET title = '$_POST[title]', text ='$_POST[text]' WHERE id='$_POST[id]'" ) or print mysql_error();

$_GET[id] =$_POST[id];

}
$query = mysql_query("SELECT * FROM indhold WHERE id='$_GET[id]'") or print mysql_error();
$row = mysql_fetch_array($query);

?>
        <TR>
            <TD width="8" valign="top" align="left">
            <img src="img/design/shadow_left_top.gif" width="8" height="117" border="0" alt="&nbsp;" />
            </td>
            <td class='leftbox'  width='100%' valign="top">
            <table width="100%"  border="0" >
            <tr>
                <td width="100%" class="pageheader" colspan="2" valign="top" >
                    <span class="overskrift">Redeiger</span>
                </td>
            </tr>         
         
            <tr>
                <td class='subheader'  valign='top' width='100%'>
             


<form method"POST">
<textarea name="title" rows="1" cols="110"><?echo ($row['title']);?></textarea><br>
<textarea name="text" rows="40" cols="110"><?echo ($row['text']);?></textarea><br>
<input type="hidden" name="id" value="<?=$_GET[id]?>" />
<input type="submit" value="tryk nyhed" name="upload"></form>

                </td>
       

            </tr></table>
            <td  width="10" valign="top" align="right">
            <img src="img/design/shadow_right_top.gif" width="8" height="117" border="0" alt="&nbsp;" />
            </td>
            </tr>
            </table>
Avatar billede plaq Nybegynder
13. juli 2005 - 14:56 #5
xyborx du siger at det er en usikker kode jeg bruger har du forslag til hvordan den kan laves mere sikker... jeg har ikke brugt php i over 3 år så jeg kan næsten ingen ting huske og lidt hjælp/guiden kunne være rart... :P
Avatar billede xyborx Nybegynder
13. juli 2005 - 15:59 #6
Prøv at lave
<form method"POST">
om til
<form method="post">

Jeg faldt også lige over
$_GET[id] =$_POST[id];
Normalt laver man ikke om på indholdet af $_GET, $_POST og i det hele taget variabler der starter med $_. Derudover skal du huske ' eller " når du bruger tekststrenge som keys i arrays. Det ville være mere korrekt at sige:
$id=$_POST['id'];
I så fald skal du så også tilpasse alle de efterfølgende steder hvor du henter id'et, så de tager det fra $id i stedet for $_GET['id'].
Det eneste sted hvor du ikke skal have ' eller " er hvis du bruger array'et inde i en streng med " omkring. Fx er det fint nok at sige:
$query = mysql_query("UPDATE indhold  SET title = '$_POST[title]', text ='$_POST[text]' WHERE id='$_POST[id]'" ) or print mysql_error();
Dog er det igen farligt at stole så meget på brugerinput. PHP har et sikkerhedsnet i form af magic quotes, som automatisk sætter \ foran diverse "skadelige" tegn, så de bliver harmløse. Men hvis du nogensinde lægger det på en server hvor magic quotes er slået fra, så kan folk pludselig få lov at rode meget mere med databasen end du havde tænkt dig. Tænk hvis nogen satte id til at være "23 OR 1". Det ville overskrive _alle_ rækker i tabellen, i stedet for den ene der var tiltænkt.

En simpel, men måske ikke skudsikker, løsning på det usikre kode i dit spørgsmål kunne være følgende:
<?php
$side=basename($_GET['side']);
if(file_exists('inc/'.$side.'.php')) {
include('inc/'.$side.'.php');
} else {
include('inc/nyheder.php');
}
?>
basename() bruges ofte til at finde filnavnet i en lang sti. Ved at bruge den her, kan du undgå at folk fx. henter en fil i en anden mappe, ved at sige side=../../../topsecret/atombomb. Uanset hvad man skriver af underlige stinavne, så er det kun selve filnavnet der bliver taget i betragtning.
Avatar billede xyborx Nybegynder
13. juli 2005 - 16:02 #7
Hov. Der skulle egentlig have stået
23' OR '1
i mit eksempel på hvordan man kan snyde sig til mere adgang til databasen.
Avatar billede plaq Nybegynder
13. juli 2005 - 16:58 #8
okey det vil jeg lige prøve... det var saucer der foreslog at jeg skulle gøre det for at få det mere sikkert en get...
Avatar billede plaq Nybegynder
13. juli 2005 - 17:07 #9
det giver ingen forskal om man skriver post eller POST
Avatar billede plaq Nybegynder
13. juli 2005 - 17:12 #10
jeg bruger $_GET['id'] fordi jeg ikke vil ha slået globel var. til så mener jeg at det er den eneste måde hvor jeg flytter id med over ved at min links ser sådan ud.. ?side=profil&id=2
Avatar billede plaq Nybegynder
13. juli 2005 - 17:39 #11
er der en der kan fortæle mig hvorfor at mit form smidder det submitede op i adresselinien??
Avatar billede plaq Nybegynder
10. august 2005 - 08:19 #12
lukker denne
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