Foutmelding bij beveiliging pagina

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Joeri de Groot

Joeri de Groot

05/07/2008 17:55:00
Quote Anchor link
Hoi Allemaal,

Ik heb een inlogscript die een sessie meegeeft aan een persoon die inlogt. Elk persoon heeft dus zijn eigen sessie. Nu wil ik dat niet alle mensen die ingelogd zijn dezelfde pagina's kunnen zien, dus ik wil controleren of ze de juiste sessie hebben om de pagina te bekijken. Ik heb nu dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
require ("../3 juli/CMS/connect.php");
require("../3 juli/CMS/session.php");
?>

<?
// in te vullen data
$bestand = ("../3 juli/CMS/nieuws.php");


  if(!is_readable($bestand))
  {

  die("Kon bestand niet openen: bestand is niet leesbaar");
  }


  if(is_writable($bestand) == FALSE)
  {

  die("Kon bestand niet openen: bestand is niet schrijfbaar");
  }



  if(isset($_SERVER["inhoud"]) == TRUE)
  {

  $inhoud = $_POST["inhoud"];
  $handeling = fopen($bestand,"w") or die("Kon bestand niet openen om te schrijven");
  $schrijf = fwrite($handeling,stripslashes($inhoud)) or die("Kon niet naar bestand schrijven");
  echo "<b>Het bestand is succesvol bewerkt.</b><br><br>Klik <a href=\"CMS/login.php\">hier</a> om terug te gaan naar het overzicht.";
  die();
  }


$inhoud = file_get_contents($bestand) or die("Kon bestand niet openen om uit te lezen");
?>

<html>

<head>
<title>Bestand editten</title>
    <link href="sample.css" rel="stylesheet" type="text/css" />
    <script type="fckeditor.js"></script>
</head>



<style>
.update{
background-color: #ffffff;
color: #EE3034;
border: 1px solid #999999;
font-family: Arial;
font-size: 12px;
}
</style>
<body bgcolor="#ffffff">

<?php
if(isset($_SESSION['suser'])) {
?>

    
    
    <?php
  if(($_SESSION['slevel'] & 1) == 1) {
    // voer code uit behorend bij recht #1
?>






<?include("fckeditor.php") ;
?>
<form action="<? echo $_SERVER["PHP_SELF"]; ?>" method="post">

<?php
$sBasePath
= $_SERVER['PHP_SELF'] ;
$sBasePath = substr( $sBasePath, 0, strpos( $sBasePath, "_samples" ) ) ;

$oFCKeditor = new FCKeditor('inhoud') ;
$oFCKeditor->BasePath    = $sBasePath ;
$oFCKeditor->Height        = 600 ;
$oFCKeditor->Value        = $inhoud ;
$oFCKeditor->Create() ;
?>


<input type="submit" class="update" value="Update pagina >>">
</form>



<?php
  } else {
?>

&nbsp;<br />

<?php
}
?>



</body>

</html>


 


Maar in de browser krijg ik de fout:
Parse error: syntax error, unexpected $end in /www/test/bewerk.php on line 103

Weet iemand waar de fout zit?? Heb alles geprobeerd, maar kom er zelf niet uit. De bedoeling is dus dat alleen de mensen met session id 1 de pagina mogen bekijken.

Alvast heel erg bedankt!!!

P.S. op regel 7 staat $bestand = ("../3 juli/CMS/nieuws.php");, maar er moeten meerdere bestanden bewerkt worden.
Het zit zo dat er vanuit een andere pagina op een link wordt geklikt, bijv: "home", en dan moet de editor home.php uitlezen. Nu moet ik handmatig "home" linken aan bijv. uitlezen_home.php, en daarin zet ik dan: $bestand = ("../3 juli/CMS/home.php");.

ik moet dus voor elke pagina die uitgelezen moet worden in de editor een nieuwe pagina aanmaken. Volgens mij moet dit makkelijker kunnen, maar ik weet niet hoe en kan het nergens vinden. Wie helpt mij uit de brand??
Gewijzigd op 01/01/1970 01:00:00 door Joeri de Groot
 
PHP hulp

PHP hulp

24/11/2024 00:20:32
 
--

--

05/07/2008 18:25:00
Quote Anchor link
Je sluit de else van regel 88 niet af.
 
Douwe

Douwe

05/07/2008 18:31:00
Quote Anchor link
En ik zou $HTTP_SERVER_VARS en $HTTP_POST_VARS maar vervangen door $_SERVER en $_POST.
En van
if(is_readable($bestand) == FALSE)
kun je
if(!is_readable($bestand))
maken, en als je dat niet wilt is
if(is_readable($bestand) === FALSE)
altijd nog beter dan wat je bu hebt.
 
Joeri de Groot

Joeri de Groot

05/07/2008 19:46:00
Quote Anchor link
HEEL erg bedankt voor de tips! De fout is verholpen.

Ik zit nu alleen nog met het probleem dat ik voor elk bestand dat ik bij wil werken een nieuwe pagina moet maken. Wie weet wat ik moet doen om i.pv. elke keer een nieuw bestand met:
$bestand = ("../3 juli/CMS/nieuws.php");

bijv. een link kan maken vanaf een bestand zoals:
<a href="bewerk.php?bestand=nieuws.php">

??

Ik ontvang alle hulp met open armen, alvast bedankt!!
Gewijzigd op 01/01/1970 01:00:00 door Joeri de Groot
 
Jan Koehoorn

Jan Koehoorn

05/07/2008 19:59:00
Quote Anchor link
Met glob kun je een array maken van alle php bestanden in een bepaalde map, bv:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    foreach (glob ('CMS/*php') as $file) {
        echo '<a href="bewerk.php?bestand='.urlencode ($file).'">'.htmlentities ($file).'</a>';
    }

?>
 
Douwe

Douwe

05/07/2008 20:07:00
Quote Anchor link
@Jan;
Inderdaad. Maar jouw scriptje geeft bestand.nietphp ook weer ;) Dit moet je er dus van maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    foreach (glob ('CMS/*.php') as $file) {
        echo '<a href="bewerk.php?bestand='.urlencode ($file).'">'.htmlentities ($file).'</a>';
    }

?>
 
Joeri de Groot

Joeri de Groot

05/07/2008 20:23:00
Quote Anchor link
Jan en Douwe M, heel erg bedankt, het is helemaal gelukt.
Nog één klein ding, misschien ben ik dom, maar hoe zorg ik er nu voor dat
$bestand = ("../3 juli/CMS/nieuws.php"); kan worden vervangen zodat hij het $bestand uitleest uit de url dus bijv. bewerk.php?bestand=nieuws.php??

ALvast 100000x dank!!
Gewijzigd op 01/01/1970 01:00:00 door Joeri de Groot
 
Jan Koehoorn

Jan Koehoorn

05/07/2008 21:15:00
Quote Anchor link
Jan Koehoorn schreef op 05.07.2008 19:59:
Met glob kun je een array maken van alle php bestanden in een bepaalde map, bv:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    foreach (glob ('CMS/*php') as $file) {
        echo '<a href="bewerk.php?bestand='.urlencode ($file).'">'.htmlentities ($file).'</a>';
    }

?>

Klopt, was het puntje vergeten ;-)
 
Joeri de Groot

Joeri de Groot

06/07/2008 11:30:00
Quote Anchor link
;) dank voor de oplossing.
Weet iemand ook of ik de variabele $bestand= "" zo kan maken dat wanneer je op de link klikt die bijv. http://www.mijnwebsite.nl/bewerk.php?bestand=home.php aangeeft, dat $bestand dan ook direct automatisch "home.php" geeft?

Dus als ik op de link
http://www.mijnwebsite.nl/bewerk.php?bestand=home.php klik, dat $bestand= "home.php" dan direct automatisch wordt ingevuld door het script??

Hoop dat het een beetje duidelijk is...

Groetjes en alvast bedankt voor de hulp!!!
 
Eddy E

Eddy E

06/07/2008 13:27:00
Quote Anchor link
Ergens bovenin je centrale pagina (header.php of index.php oid) dit neerzetten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$bestand
= htmlentities($_GET['bestand']);
?>


Wellicht makkerlijker en veiliger om te werken met htaccesss.
Dan vul je dit in:

mijnwebsite.nl/bewerk/home/

Dat wordt dan omgetoverd naar:
mijnwebsite.nl/bewerk.php?bestand=home

Met de php kan je die .php wel achter home[/]b plakken.
De kans dat je gehacket wordt, is gewoon veel kleiner.

Immers: bewerk.php?bestand=config.php is niet echt prettig ;).
 
Joren de Wit

Joren de Wit

06/07/2008 13:38:00
Quote Anchor link
@Eddy: en wat houdt mij tegen om mijnwebsite.nl/bewerk/config/ in te vullen? Dan heb je toch precies hetzelfde resultaat?

Nee, mod rewrite is geen beveiligings middel het is enkel een middel om te zorgen dat je urls er netter uit zien en tevens bots van bijvoorbeeld google je site beter te kunnen laten indexeren. De beveiliging zul je toch echt in je PHP code op moeten nemen, daar zul je dus moeten aangeven dat config.php niet in de editor geopend mag worden...
 
Joeri de Groot

Joeri de Groot

06/07/2008 14:11:00
Quote Anchor link
Het werkt!!! Bedankt!!!

Ik heb nu alleen nog 1 klein vraagje:

het bestand dat ik wil wijzigen zit bijv. in de map www/CMS/joeri/nieuws.php en de editor bevindt zich in de map www/editor/bewerk.php.

Hoe kan ik er nu voor zorgen dat nieuws.php uitgelezen wordt in bewerk.php, wanneer deze in andere mappen zitten???
Als ik ze in dezelfde map doe lukt het, maar in andere nog niet....
 
Eddy E

Eddy E

06/07/2008 14:23:00
Quote Anchor link
@ Blanche: doordat je handmatig in je htaccess die wel kan weigeren.
Of gewoon los doorgeven, dus hardcore htaccesse en niet met eregs etc.
De beveiliging is uiteraard in php nogmaals aanwezig.
Want men kan alsnog naar bewerken.php?bestand=config gaan, ook zonder htaccess om.

@ Joeri: ../CMS/joeri/nieuws.php
Je gaat dus eerst uit editor.. dan zit je in de map "www". En gaat daarvandaan dus weer je CMS-map in etc.
 
Joeri de Groot

Joeri de Groot

06/07/2008 15:02:00
Quote Anchor link
Het werkt nu, bedankt!!!!
Mensen bestanden alleen uit één map bewerken. Ik dacht dus: ik maak $bestand zo dat de map al is ingesteld in het php bestand dus zoiets als:

$bestand = ../3 juli/CMS/richard/htmlentities($_GET['bestand']);


alleen bovenstaand werkt natuurlijk niet. Weet iemand wat ik moet doen om dit wél te laten werken???

B.v.d.
 
Joren de Wit

Joren de Wit

06/07/2008 15:14:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$bestand
= '../3 juli/CMS/richard/' . htmlentities($_GET['bestand']);
?>


Maar goed, dat is nog niet veilig. Want als je nu als get variabele bijvoorbeeld '../../bestand.php' opgeeft, zit je alweer in de map '3 juli' en open je daar het bestand 'bestand.php'.

Je zult dus moeten voorkomen dat mensen zomaar in alle mappen kunnen komen door bijvoorbeeld het gedeelte '../' te weigeren in $_GET['bestand']. Komt dat wel voor, dan moet je een foutmelding geven...
 
Joeri de Groot

Joeri de Groot

06/07/2008 15:24:00
Quote Anchor link
*schaamt* en hoe doe ik dat.....?
 
Joren de Wit

Joren de Wit

06/07/2008 15:30:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if(strpos($_GET['bestand'], '../'))
{

   // Opgegeven bestand niet geldig!
}
?>
 
Joeri de Groot

Joeri de Groot

06/07/2008 16:21:00
Quote Anchor link
Bedankt!!
heb nu dit in m'n pagina staan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$bestand = '../3 juli/CMS/' . htmlentities($_GET['bestand']);

if(strpos($_GET['bestand'], '../'))
{
echo "Deze pagina mag niet worden bekeken.";
}


maar ik kan nog steeds in mappen komen door ../../ enz...

Wat doe ik fout????
 
Joeri de Groot

Joeri de Groot

18/07/2008 14:15:00
Quote Anchor link
Iemand een idee?
 
Eddy E

Eddy E

18/07/2008 14:27:00
Quote Anchor link
een simpele str_replace() gebruiken om de ../ weg te halen?
Let wel dat men een punt ook op diverse andere manieren kan schrijven (htmlspecialchar() en htmlentities() etc).
 
Joren de Wit

Joren de Wit

18/07/2008 14:42:00
Quote Anchor link
Hmm, strpos() geeft natuurlijk 0 terug als de string met ../ begint. En laat 0 nu gelijk staan aan FALSE. Dit zal wel werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$bestand
= '../3 juli/CMS/' . htmlentities($_GET['bestand']);

if(preg_match('_\.\./_', $_GET['bestand']))
{

    echo "Deze pagina mag niet worden bekeken.";
}

?>
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.