[FCKeditor/PHP] beveiliging

Pagina: 1
Acties:
  • 604 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • X-trace
  • Registratie: Juni 2004
  • Laatst online: 02-11-2024
Heb nu FCKeditor geïmplementeerd als editor voor een admin. Oftewel: wanneer je bent ingelogd heb je mogelijkheid om content te bewerken. Het inloggen gaat via de sessie.
Nu kun je de file browser aanroepen door de goede url in te kloppen. Wanneer je de locatie van FCKeditor op een server weet plak je bijvoorbeeld "/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/php/connector.php" achter de locatie en je hebt de editor.

Iemand enig idee of FCKeditor te beveiligen is zonder htaccess. Want als ik htaccess gebruik vraagt hij dus ook om login als ik ben ingelogd en dat wil ik niet.

You cannot not communicate


Acties:
  • 0 Henk 'm!

Verwijderd

Gebruik mod_rewrite om alle te beveiligen URL's te rewriten naar een of ander PHP script dat controleert of iemand is ingelogd. Zo ja, dan geef je het gewenste bestand terug, zo nee, dan redirect je naar de inlogpagina.
Iemand enig idee of FCKeditor te beveiligen is zonder htaccess. Want als ik htaccess gebruik vraagt hij dus ook om login als ik ben ingelogd en dat wil ik niet.
Die .htaccess bestanden worden voor wel meer dingen gebruikt dan alleen voor authenticatie.

[ Voor 38% gewijzigd door Verwijderd op 18-07-2007 15:23 ]


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

simpel toch? beveilig die connector ook met je sessie login :?

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • X-trace
  • Registratie: Juni 2004
  • Laatst online: 02-11-2024
Ja, ok. Was even 1 belangrijke aspect vergeten: wanneer ik FCKeditor update moet het niet al te veel werk zijn. Misschien de config houden en de rest vervangen. En aangezien ik het bij meerdere systemen heb toegepast zit ik er niet op te wachten ze allemaal bij langs te lopen.

You cannot not communicate


Acties:
  • 0 Henk 'm!

Verwijderd

Je hoeft helemaal niet aan die FCKeditor bestanden of configuratie te komen. Precies wat ik zei, 1 relatief eenvoudig PHP scriptje maken, en een .htaccess bestandje toevoegen in de juiste directory.

Acties:
  • 0 Henk 'm!

  • X-trace
  • Registratie: Juni 2004
  • Laatst online: 02-11-2024
Verwijderd schreef op woensdag 18 juli 2007 @ 15:29:
Je hoeft helemaal niet aan die FCKeditor bestanden of configuratie te komen. Precies wat ik zei, 1 relatief eenvoudig PHP scriptje maken, en een .htaccess bestandje toevoegen in de juiste directory.
was reactie op SchizoDuckie. Ga me eerst verdiepen in mod_rewrite. TNX

You cannot not communicate


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Ik heb hetzelfde 'probleem' alleen heb het niet echt als een probleem gezien.

Ik ging er vanuit dat je, omdat je alleen bij de editor kan, niet echt schaddelijke dingen kan doen. Maar natuurlijk is het uploaden van bestanden naar je server niet echt gewenst.

Wat je zou kunnen doen is je check (of je ingelogt bent of niet) uit te voeren op momenten dat jij dat nodig vind (dus bij bijv. het uploaden van files)

ik vraag me af hoe ze dat in joomla gedaan hebben.
Ik kan me goed voorstellen dat er in FCKeditor al zo'n 'check' zit, en dat het enige dat je hoeft te doen is de variabele zetten in je $_Session var.. (oid)

edit:
@cheatah, hoe wil je dat doen?
wanneer je de files wilt benaderen vanuit een iframe (zoals je fckeditor moet implementeren) of direct maakt weinig uit. hoe kan je met een .htaccess file het verschil zien?

[ Voor 14% gewijzigd door BasieP op 18-07-2007 15:33 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 23:07
Cheatah bedoeld dat je een php file maakt, die in bijvoorbeeld je root staat. Met behulp van een htaccess en modrewrite kun je de filerequests afhandelen.

Je herschrijft de URL naar de catchfilerequest.php (bijvoorbeeld). Dat bestaand kijkt dan heb je toegang, zoja, geeft het bestand door, parse het, whatever.

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
storeman schreef op woensdag 18 juli 2007 @ 17:40:
Cheatah bedoeld dat je een php file maakt, die in bijvoorbeeld je root staat. Met behulp van een htaccess en modrewrite kun je de filerequests afhandelen.

Je herschrijft de URL naar de catchfilerequest.php (bijvoorbeeld). Dat bestaand kijkt dan heb je toegang, zoja, geeft het bestand door, parse het, whatever.
dus stel dat ik

/editor/iets/connector/blaat.php opvraag, dan rewrite mod_rewrite dat naar:
check.php?link=/editor/iets/connector/blaat.php
en wanneer de check goed is stuurt ie header redirect? dat klinkt wel goed :)

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

BasieP schreef op woensdag 18 juli 2007 @ 19:47:
[...]

dus stel dat ik

/editor/iets/connector/blaat.php opvraag, dan rewrite mod_rewrite dat naar:
check.php?link=/editor/iets/connector/blaat.php
en wanneer de check goed is stuurt ie header redirect? dat klinkt wel goed :)
Nee, wanneer die check goed is, geeft hij de inhoud van het bestand terug met bijvoorbeeld readfile(). Wanneer de check NIET goed is kun je redirecten, of gewoon een formulier includen. Je moet dus zorgen dat er geen enkele content op te vragen is via een andere URL. Alle URL's moeten via je script afgehandeld worden, en er moet in het geval de gebruiker toegang heeft niet worden geredirect.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op woensdag 18 juli 2007 @ 20:05:
[...]

Nee, wanneer die check goed is, geeft hij de inhoud van het bestand terug met bijvoorbeeld readfile(). Wanneer de check NIET goed is kun je redirecten, of gewoon een formulier includen. Je moet dus zorgen dat er geen enkele content op te vragen is via een andere URL. Alle URL's moeten via je script afgehandeld worden, en er moet in het geval de gebruiker toegang heeft niet worden geredirect.
Erg interessant! Heb er nog nooit bij na gedacht. Maar hoe wil je dat bereiken?

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
wanneer je dmv readfile een php file inleest krijg je de inhoud van de file terug. Deze wordt niet serverside geparsed.. hoe wil je dat oplossen?
met plaatjes kan het wel, maar dan moet je ook weer weten welke content type je file is, en dat is ook weer lastig...

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

BasieP schreef op woensdag 18 juli 2007 @ 21:57:
wanneer je dmv readfile een php file inleest krijg je de inhoud van de file terug. Deze wordt niet serverside geparsed.. hoe wil je dat oplossen?
met plaatjes kan het wel, maar dan moet je ook weer weten welke content type je file is, en dat is ook weer lastig...
Als er wel geparset moet worden kun je include gebruiken hè :z

En de Content-Type van een bestand bepalen is niet bepaald lastig hoor. Maar ik word hier een beetje moe van. De basis is heel simpel, en als het uitgebreider moet kan iedereen dat ook wel zelf bedenken.

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Verwijderd schreef op woensdag 18 juli 2007 @ 22:17:
[...]

Als er wel geparset moet worden kun je include gebruiken hè :z

En de Content-Type van een bestand bepalen is niet bepaald lastig hoor. Maar ik word hier een beetje moe van. De basis is heel simpel, en als het uitgebreider moet kan iedereen dat ook wel zelf bedenken.
vroeg het me gewoon af, bedoel er niks mee hoor :)
Ik heb zelf ook zoiets nodig, maar heb nog niet helemaal voor ogen hoe het nou te doen. Het idee vind ik super, je vangt er namelijk echt alles mee af. Maar om zo'n ding zo te maken dat je er alle files mee kunt benaderen is lastiger
volgens mij kom je dan eigenlijk uit bij:
PHP:
1
2
3
4
5
6
7
8
9
10
11
if (check($file)) {
  $contenttype = getcontenttype(file);
  if ($contenttype == 'php') {
    setcontenttype($contenttype)
    include $file;
  } else {
    redirect($file);
  }
} else {
  redirect("http://disney.com");
}

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

Waarom gebruik je php-functies die niet bestaan?

Dit werkt perfect:
PHP:
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
<?php
session_start();

/**
 * Op een of andere manier werkt $_SERVER['REDIRECT_URL'] niet,
 * zonder de voorliggende mappen werkt het wel.
 */
$base_href = str_replace('check.php', '', $_SERVER['SCRIPT_NAME']);
$redirect = str_replace($base_href, '', $_SERVER['REDIRECT_URL']);

/**
 * Controleren of het bestand bestaat en als deze niet bestaat
 * een 404 Not Found error geven.
 */
if (file_exists($redirect))
{
    /**
     * Controleren of er ingelogd is, is dit het geval, dan wordt de
     * content-type geset en bestand geinclude. Is dit niet het
     * geval, dan wordt er een 403 Forbidden error gegeven
     */
    if ($_SESSION['ingelogd'] === true)
    {
        header('Content-type: '.mime_content_type($redirect));
        include($redirect);
    }
    else 
    {
        header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden');
?>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
    <head>
        <title>403 Forbidden</title>
    </head>
    <body>
        <h1>Forbidden</h1>
        <p>You don't have permission to access <?=$_SERVER['REDIRECT_URL']?> on this server.</p>
        <hr />
        <address><?=$_SERVER['SERVER_SIGNATURE']?></address>
    </body>
</html>
<?php
    }
}
else 
{
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
?>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
    <head>
        <title>404 Not Found</title>
    </head>
    <body>
        <h1>Not Found</h1>
        <p>The requested URL <?=$_SERVER['REDIRECT_URL']?> was not found on this server.</p>
        <hr />
        <address><?=$_SERVER['SERVER_SIGNATURE']?></address>
    </body>
</html>
<?php
}
?>


En dan de .htaccess:
code:
1
2
RewriteEngine on
RewriteRule ^(.*)$ check.php [L]

Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt ook met constante werken, en dan elke parent file checken of deze is geset.

Dus in een file wat aangeroepen mag worden zet je:

PHP:
1
define("VALID", "1");


En in files die niet direct aangeroepen mogen worden check of deze constante geset is.

PHP:
1
defined( 'VALID' ) or die( 'Restricted access' );

[ Voor 16% gewijzigd door Verwijderd op 19-07-2007 11:21 ]


Acties:
  • 0 Henk 'm!

  • jan-marten
  • Registratie: September 2000
  • Laatst online: 20:24
Hm, ik gebruik FCKeditor ook op een paar websites (met die filebrowser erbij) maar als ik de browser gelijk aanroep krijg ik "XML request error: Forbidden (403)" meldingen.

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
jan-marten schreef op donderdag 19 juli 2007 @ 12:07:
Hm, ik gebruik FCKeditor ook op een paar websites (met die filebrowser erbij) maar als ik de browser gelijk aanroep krijg ik "XML request error: Forbidden (403)" meldingen.
klopt, dat is de ajax foutmelding die die pagina geeft.
echter wil je helemaal dat ajax request niet uitvoeren.


Ik gebruik nu een verbouwde versie van Gdo0's code.
ik verstuur redirect headers in alle gevallen, namelijk naar mij main site (met custom 404 foutmelding) wanneer het een 404 is, en een redirect naar mijn login.php als het een 403 is.

echter, daarvoor moet ik in mijn .htaccess login.php, index.php en nog wat files excluden van die regel.
Ik ga nu naar mijn 'admin' gedeelte van mijn website door /admin/ (ter voorbeeld) er achter te typen.
Niet /admin/index.php. Nu verwijst hij alleen door naar check.php, die een lege 'redirect' string ziet...
iemand een idee hoe ik het netst gewoon kan zorgen dat deze / gewoon door apache afgehandeld wordt? (dus doorverwezen naar index.php of index.html ofzo)?

ik kan wel
code:
1
RewriteCond %{REQUEST_FILENAME} !-d
neerzetten, maar dan doet ie dit voor alle directories, niet voor alleen de 'root' (admin) directory

edit:
ow en zowel 'mime_content_type()' als 'finfo_open()' werken hier niet... nog andere manieren om content type te achterhalen?

[ Voor 11% gewijzigd door BasieP op 19-07-2007 17:27 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

Waarom redirect je dan naar login.php en include je hem niet gewoon? Hetzelfde geldt voor die index.php.

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
ja dat kan ook, maar daarmee is het probleem niet weg...

dwz, dat gedeelte werkte al, ik exclude gewoon in de htaccess die login.php en klaar.
Als ik hem include hoef ik hem ook niet in die .htaccess file te zetten, dat is wel makkelijk.

Maar dan doet /admin/ (de directory) het nog niet mee..

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

Dan voeg je toch gewoon even RewriteCond %{REQUEST_URI} !^/?$ toe? Of je verandert de RewriteRule zodat er ^/?(.+)$ staat. in plaats van ^(.*)$

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
tnx, ik heb nu ^(.+)$ en dat werkt.

content type wil niet echt lukken. Ik heb nu dit:
PHP:
1
2
3
4
5
    if ( ! function_exists ( 'mime_content_type ' ) ) {
        function mime_content_type ( $f )  {
            return trim ( exec ('file -bi ' . escapeshellarg ( $f ) ) ) ;
        }
    }

maar dit is traag, en geeft soms fouten..
als ik FCKeditor laad krijg ik een download schermpje van me browser of ik een php file wli downloaden.

deze is dan wel geparsed, maar heeft als content type natuurlijk php ipv html..


hoe zit het trouwens met caching van files? moet ik hier nog dingen voor regelen of gaat dit wel goed zonder aanpassing?

[ Voor 11% gewijzigd door BasieP op 19-07-2007 18:14 ]

This message was sent on 100% recyclable electrons.

Pagina: 1