Avatar billede sorenriis Nybegynder
01. juni 2005 - 19:16 Der er 8 kommentarer og
2 løsninger

Register Globals på off

Jeg har indtil videre altid kodet med register_globals på on, men har nu fundet ud af at det vist udgør en sikkerhedsrisiko.

Så derfor kan jeg vel ligesågodt lære hvordan det gøres med det slået fra.

Jeg har vedlagt et kode-eksempel. Nogle der kan vise mig hvordan det kodes med register_globals på off?
Avatar billede sorenriis Nybegynder
01. juni 2005 - 19:17 #1
<?
if($name){
echo "<font size=2><center>The banner has been submitted</center></font>";
include "database.php";
mysql_query("INSERT INTO banners (place,name,file,url,views) VALUES ('$place','$name','$file','$url','$views')");
} else {
   
$folder = "../../more/banner/top";
$files = array();
if ($handle = opendir($folder)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && !is_dir($file)) {
$files[]= $file;
}
}
closedir($handle);
}
sort($files);
reset($files);
       
?>
<FORM METHOD=POST ACTION=<? echo $PHP_SELF;?>>
<table>
<tr><td><font size=2>Place:</font></td><td><select name=place>
<option value=0>Left</option>
<option value=1>Right</option>
</select></td></tr>
<tr><td><font size=2>File:</font></td><td><select name=file>
<?
foreach ($files AS $val){
echo "<option>$val</option>";
}
?>    
</select></td></tr>
<tr><td><font size=2>Company:</font></td><td><input type=text name=name></font></td></tr>
<tr><td><font size=2>Link:</font></td><td><input type=text name=url value="http://"></font></td></tr>
<tr><td></td><td><input type=submit value=Submit></td></tr>
</table>
</form>
<?
}
?>
Avatar billede webt Nybegynder
01. juni 2005 - 19:25 #2
Det du skal ændre er moden du henter variablerne fra formularen i stedet for $variablenavn skal du nu bruge $_POST['variablenavn'] (eller $_GET hvis formularen sendes med get), udover det bør din $PHP_SELF også ændres til $_SERVER['PHP_SELF'] om der er andre ting jeg lige har misset skal jeg ikke kunne sige men det er i hvert fald langt hen ad vejen

Mvh
Martin
Avatar billede webt Nybegynder
01. juni 2005 - 19:30 #3
Du får den lige i rettet, kan ikke love jeg ikke har overset noget :)
    <?
if($_POST['name'){
echo "<font size=2><center>The banner has been submitted</center></font>";
include "database.php";
mysql_query("INSERT INTO banners (place,name,file,url,views) VALUES ('".$_POST['place']."','".$_POST['name']."','".$_POST['file']."','".$_POST['url']."','".$_POST['views']."')");
} else {
 
$folder = "../../more/banner/top";
$files = array();
if ($handle = opendir($folder)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && !is_dir($file)) {
$files[]= $file;
}
}
closedir($handle);
}
sort($files);
reset($files);
     
?>
<FORM METHOD=POST ACTION=<? echo $_SERVER['PHP_SELF'];?>>
<table>
<tr><td><font size=2>Place:</font></td><td><select name=place>
<option value=0>Left</option>
<option value=1>Right</option>
</select></td></tr>
<tr><td><font size=2>File:</font></td><td><select name=file>
<?
foreach ($files AS $val){
echo "<option>$val</option>";
}
?>   
</select></td></tr>
<tr><td><font size=2>Company:</font></td><td><input type=text name=name></font></td></tr>
<tr><td><font size=2>Link:</font></td><td><input type=text name=url value="http://"></font></td></tr>
<tr><td></td><td><input type=submit value=Submit></td></tr>
</table>
</form>
<?
}
?>
Avatar billede kargo1 Nybegynder
01. juni 2005 - 20:07 #4
Som webt skriver, skal du bruge $_POST, hvis variablerne overføres med post, og $_GET, hvis de overføres med get. Vil du acceptere begge dele i dit script, skal du bruge $_REQUEST.
En god måde at strukturere det på - og tilrette eksisterende scripts - er at indlede dit script med at kontrollere for, om alle forventede variabler er overført, og ellers give dem en standardværdi, så dit script ikke går ned, hvis en variabel mangler.

Fx.:
if (empty($_POST['name'])) $name = '';
else $name = $_POST['name'];
if (empty($_POST['place'])) $place = 0;
else $place = $_POST['place'];

... og så fremdeles. Herefter kan du fortsætte med dit eksisterende script:
if ($name){
... osv.
Avatar billede webt Nybegynder
01. juni 2005 - 20:33 #5
Skal lige tilføjes at $_REQUEST kun bør bruges i de ekstremt særlige tilfælde hvor du virkelig ønsker at både get og post skal fungere, ellers kan det gå hen og blive en mindre sikkerheds risiko

Mvh
Martin
Avatar billede sorenriis Nybegynder
01. juni 2005 - 22:57 #6
Tusind tak for hjælpen.. Afgiver I lige et svar?

Når vi nu er ved snakken. Er der andre ting, som jeg bør slå til/fra i php af sikkerhedsgrunde (ala register_globals)?
Avatar billede sorenriis Nybegynder
01. juni 2005 - 23:04 #7
Og et lille ekstra spørgsmål:

Når jeg kører scriptet med $_POST, så får jeg disse meddelelser:
Notice: Use of undefined constant id - assumed 'id' in c:\webserver\www\create_news.php on line 65
Notice: Undefined index: $category in c:\webserver\www\create_news.php on line 69
Notice: Undefined index: $topic in c:\webserver\www\create_news.php on line 69
Notice: Undefined index: $writer in c:\webserver\www\create_news.php on line 69
Notice: Undefined index: $teaser in c:\webserver\www\create_news.php on line 69
Notice: Undefined index: $text in c:\webserver\www\create_news.php on line 69
Notice: Undefined index: $type in c:\webserver\www\create_news.php on line 69

Noget jeg skal gøre noget ved?
Avatar billede sorenriis Nybegynder
01. juni 2005 - 23:15 #8
Desuden får jeg en masse af dem her også:

Notice: Use of undefined constant date - assumed 'date' in c:\webserver\www\modify_news.php on line 52

Noget at gøre ved det?
Avatar billede kargo1 Nybegynder
02. juni 2005 - 00:02 #9
Mon ikke, det er fordi du glemmer apostroffer inden for kanteparanteserne? Det skal være $_POST['name'], ikke $_POST[name]
Avatar billede webt Nybegynder
02. juni 2005 - 08:39 #10
Vil også tro det er hvad kargo1 siger, har ikke meget styr på selve opsætningen af php, men http://dk.php.net/manual/en/security.php er et godt sted at starte mht til sikkerheden.
Mvh
Martin
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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