Vilka php kommandon kan vara "farliga"

Permalänk

Vilka php kommandon kan vara "farliga"

Håller på med en community där folk kommer kunna
göra en egen sida med html/php.

Sidan kommer att köras på serven så det gäller ju att sätta
lite regler osv. Censurera bort php kommandon osv.
kommer alltså köra ett antal:

$text = str_replace('kommando', '', $text);

Så nu undrar jag vilka kommandon som jag ska räkna som
en "säkerhetsrisk". De jag kommit på hittills är:

"mysql_" - använder mysql på serven och vill inte riskera hacking försök.

"include" - vill undvika inkluderingar av sidor från communityn osv.

"fopen" - vill ju inte ha folk som ändrar på webbplatsen

Hoppas ni fattar vad jag menar.

Permalänk
Medlem

Varför måste användarna behöva använda php?
Du kan väl tillåta dessa kommandon, men ge användarrestriktioner på servern?

Visa signatur

Har bytt namn från: nulleman ~ Blogg: http://skorpion.se
MacBook Pro: 15.4' ~ 1.83GHz ~ 1512MB RAM ~ 80GB HDD
Medlem i signaturen blodtörstiga Appleanvändare

Permalänk
Medlem

Ordna med rättigheter istället. Det är inte möjligt att hindra användarna att använda vissa PHP-funktioner. Man kan lagra kod i en sträng (förvrängd så att ditt script inte märker vad de innehåller) och mata den till eval(). Visst, du kan "förbjuda" eval, men jag kan säga att det kommer bli mycket lättare för dina användare att komma förbi ditt skydd än det kommer vara för dig att förhindra det.

Visa signatur

:€

Permalänk

hm, låter ju helt klart bättre. Har dock aldrig sett att man kan ändra rättigheter
innom php? Hur funkar det? har ni någon bra länk?

och btw. allt som användarna skriver in på sin sida sparas ju i en .php fil på min
server. Hur skulle de kunna gömma något? eftersom om man tar:

$text = str_replace('kommando', '', $text);

på allt innehåll från en <textarea> så tar den ju bort allt som innehåller det ordet?

tex:

användaren skriver in:

$hej = include ('sida.php');

detta skickas sen med post från textarean

och jag kör detta innan det skrivs till filen:

$text = str_replace('include', '', $_POST[anv_sida]); $f = fopen('derassida.php',"r+"); fwrite($f,"$text"); fclose($f);

Detta skulle väl ge:

$hej = ('sida.php');

Det sättet ni pratar kanske är bättre och säkrare, då tar jag gärna emot länkar och kanske lite info om varför detta inte funkar.

Permalänk
Hedersmedlem

Din metod är inherent osäker: För varje grej du glömmer att förbjuda kommer du ha ett säkerhetshål.

Jag skulle hitta på ett smartare sätt.

Kolla den här tråden:

http://forum.sweclockers.com/showthread.php?s=&threadid=52942...

Permalänk
Medlem

...och säg att man skriver:

$hej = inclincludeude('sida.php');

så kommer det ersättas med

$hej = include('sida.php');

Visa signatur

"`F' is group reply. This is because `G' is for sort and `g' is for get new mail. And `G' is for sort because `sort' used be called `group', and anyway `S' is for save mailbox and `s' is for file message in folder, because `f' is group reply and `F' is group reply including original text."

Permalänk
Medlem

alternativet är att du gör en lista med tillåtna kommandon... Det går, även om det är lite klurigt att även få det säkert, men inte omöjligt, dock måste du i princip skriva en egen parser, vilket heller inte är omöjligt, men lite klurigt...

Men att låta användarna koda php är ju iaf livsfarligt... Om någon bara skriver while(1) så kommer hela siten att hänga sig... Kul....

Permalänk

okej, verkar som detta kommer kräva mer jobb än jag trodde

totoo: det kommer inte vara som på lunar att deras sidor syns innom
communityn. För att kolla på användarens egen "hemsida" så måste man
surfa direkt till deras .php fil.

ex: http://serverip/sidan/users/username/username.php

så om de gör en while(1) så är det deras förlust
(tror jag!) 8-)

men det sättet jag hade tänkt verkar inte så smart längre..
får väl leta vidare efter en lösning.

Edit: Hur gör man lättast ett sånnt system som t.ex. Lunar har?
alltså egna taggar, och inga andra taggar fungerar.

Permalänk
Medlem

T ex såhär kan man köra include("sida.php"):

eval(str_rot13('vapyhqr("fvqn.cuc")'));

Visa signatur

:€

Permalänk
Medlem

disable_functions i php.ini, fylll på med alla farliga funktioner.

Visa signatur

Oh. Uhm, look... if we built this large wooden badger...

Permalänk

okej en ny ide nu då..

Om jag vill deativera php i en .php fil kan jag göra något liknande detta:

(dom skriver sin sida i ett textarea som sagt)

<? $text = $_POST[anv_sida]; disable(); function disable() { $text = str_replace('<?', '', $text); $text = str_replace('?>', '', $text); checked(); } function checked() { If (preg_match("/<?/i", "$text") || preg_match("/?>/i", "$text")) { disable(); } else { site_ok(); } } function site_ok() { // Skriver till deras .php fil } ?>

Nu är inte detta någon optimal kod, men ni fattar vad jag menar?
om detta skulle funka så kom gärna med förbättringar på koden.

sen kan man ju göra egna funktioner som användaren kan använda sig av med
hjälp av []-taggar. Och i site_ok() erätter man dem med sina funktioner?

ex: [anv_ip] skulle ersättas med <?php echo ("$_SERVER['REMOTE_ADDR']");?> osv.

Permalänk
Medlem

är det inte bara bättre att köra med safe_mode ?

och sen vara mer nogran med rättigheter ?

så har då jag gjort

Visa signatur

Jag har dyslexi.

Permalänk
Medlem
Visa signatur

Har bytt namn från: nulleman ~ Blogg: http://skorpion.se
MacBook Pro: 15.4' ~ 1.83GHz ~ 1512MB RAM ~ 80GB HDD
Medlem i signaturen blodtörstiga Appleanvändare