Toon posts:

[PHP] deze code veilig voor reactie systeem?

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

Verwijderd

Topicstarter
ik ben bezig met het herscripten van ccmod omdat wij gaan overstappen op een nieuw systeem, het systeem word aardig, beter dan het vorige systeempje.

nou heb ik dus een reactie systeem dat alle gebruikters op nieuws kunnen reageren.
de input gaat via een popupje dat alles afhandelt.
nou heb ik iets nodig dat nl2bl enzo aanroept(addslashes, blabla, etc.)

dus heb ik dit systeem gemaakt:
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
$text = nl2br($text); 
$text = str_replace("<br />", "[br]", $text);
$search = array ("'<script[^>]*?>.*?</script>'si",  // Strip out javascript
                 "'<[\/\!]*?[^<>]*?>'si",           // Strip out html tags
                 "'([\r\n])[\s]+'",                 // Strip out white space
                 "'&(quot|#34);'i",                 // Replace html entities
                 "'&(amp|#38);'i",
                 "'&(lt|#60);'i",
                 "'&(gt|#62);'i",
                 "'&(nbsp|#160);'i",
                 "'&(iexcl|#161);'i",
                 "'&(cent|#162);'i",
                 "'&(pound|#163);'i",
                 "'&(copy|#169);'i",
                 "'&#(\d+);'e");                    // evaluate as php
$replace = array ("",
                  "",
                  "\\1",
                  "\"",
                  "&",
                  "<",
                  ">",
                  " ",
                  chr(161),
                  chr(162),
                  chr(163),
                  chr(169),
                  "chr(\\1)");
$text = preg_replace ($search, $replace, $text);
$text = htmlspecialchars($text); 
$text = addslashes($text); 
$text = preg_quote ($text, "/");


nu vraag ik me af of dit helemaal veilig is, en of dat ik iets vergeten ben waardoor een gebruiker op een gekke wijze in mijn php/mysql kan ofzo.
en gekke dingen kan doen via javascript.

deze code is dus bedoelt voor het inzetten van de text in de db.
het uitlezen zit nog een ubbcode systeem achter.


ok ik weet het, het mag niet, maar toch alvast bedankt namens ccmod.com ;)

[ Voor 0% gewijzigd door Verwijderd op 14-08-2002 15:32 . Reden: iets vergeten ]


  • Aphelion
  • Registratie: Januari 2002
  • Laatst online: 19-07 19:19
tjsa dit is toch slechts controle op je systeem. beter 1 keer teveel gecontroleerd op fouten dan 1 keer te weinig.. :)

Feeling lonely and content at the same time, I believe, is a rare kind of happiness


  • Juup
  • Registratie: Februari 2000
  • Niet online
Ik zou het andersom doen: Je mag alleen karakters [a-zA-Z0-9_ ] gebruiken. Zo niet, reject. Is veeeel veiliger.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Als je een quickreply box gebruikt dan zou ik <form> tags ook uitzetten. Je kan bij sommige forums een <form> tag met wat onSubmit code toevoegen.
Zo heb ik een tijdje geleden voor een bedrijf zo'n forum getest, en kon ik de quickreply ietwat editen zodat een cookie met het password van de user werd uitgelezen en gepost. == niet goed :)

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Topicstarter
_Mo_ schreef op 14 augustus 2002 @ 15:36:
Als je een quickreply box gebruikt dan zou ik <form> tags ook uitzetten. Je kan bij sommige forums een <form> tag met wat onSubmit code toevoegen.
Zo heb ik een tijdje geleden voor een bedrijf zo'n forum getest, en kon ik de quickreply ietwat editen zodat een cookie met het password van de user werd uitgelezen en gepost. == niet goed :)
daarom staat de html toch uit?
"'<[\/\!]*?[^<>]*?>'si", // Strip out html tags
dus dan zou <form> nie kunne werken :+
wel dan?

ik weet echt niet alles van php, en ik snap helemaal nix van al die /\\[] dingen, daar moet ik me nog in verdiepen.
maar ik heb het nog nie nodig gehad, een stuk van de bovestaande code komt van php.net, vedder zelf gemaakt met wat hulp van de search.
om te kijken wat ik nodig heb en wat niet.

kijk ik ben al heel ver, ik hoef alleen een paar schoonheidsfoutjes op te lossen en dit te installeren.
en de useradmin enzo.
maar binnekort kunnen wij overstapen op het nieuwe systeem :)

ik denk dat deze wel veilig is, maar daar kan ik beter de expers over laten spreken.
Juup schreef op 14 augustus 2002 @ 15:36:
Ik zou het andersom doen: Je mag alleen karakters [a-zA-Z0-9_ ] gebruiken. Zo niet, reject. Is veeeel veiliger.
hoe doe ik dat dan?
owja, ze moetten ook smilies en ubb kunnen gebruiken.
dus [ ] ; ) ( | : enzo moetten nie op block staan

[ Voor 0% gewijzigd door Verwijderd op 14-08-2002 15:44 . Reden: nieuwe quote ]


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
This function is identical to htmlspecialchars() in all ways, except that all characters which have HTML character entity equivalents are translated into these entities. Like htmlspecialchars(), it takes an optional second argument which indicates what should be done with single and double quotes. ENT_COMPAT (the default) will only convert double-quotes and leave single-quotes alone. ENT_QUOTES will convert both double and single quotes, and ENT_NOQUOTES will leave both double and single quotes unconverted.
dus dat heb ik al, maar dan iets verschil.
zou ik het zou houden of nieuwe nemen?

en deze:
PHP:
1
$string = strip_tags($string, "<a><b><i><u>");

dus daar kan ik <script><form><table> enzo inzetten, dan kunnen ze dat niet gebruiken?
of juist wel?
mijn engels is nie geweldg

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Als je geen enkele tag toe wilt laten moet je er gewoon niks in zetten.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

http://nl.php.net/manual/nl/function.strip-tags.php

Nederlands talig :)

En het is verstandig om eerst strip_tags te gebruiken en daarna nogeens door htmlentities te halen.

Programmer - an organism that turns coffee into software.


  • Juup
  • Registratie: Februari 2000
  • Niet online
Verwijderd schreef op 14 augustus 2002 @ 15:40:
hoe doe ik dat dan?
owja, ze moetten ook smilies en ubb kunnen gebruiken.
dus [ ] ; ) ( | : enzo moetten nie op block staan
Tja je zegt het zelf al. Het idee is: st a alleen chars toe die ze nodig hebben en anderen niet. Daarmee kunnen ze dan ook geen html enzo maken.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Wat is er mis met:

$uitvoer = addslashes(htmlspecialchars($userinvoer));

Dan komt er toch ook niks meer door?

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 01-09 18:16
Zoijar schreef op 14 augustus 2002 @ 17:50:
Wat is er mis met:

$uitvoer = addslashes(htmlspecialchars($userinvoer));

Dan komt er toch ook niks meer door?
zo deed ik dat ook altijd, dan wel iets anders:

$blaat = addslashes(htmlspecialchars(strip_tags($bericht)));

Verwijderd

idd ja, Is htmlspecialchars($text) niet genoeg dan om alle html-code uit te bannen in de database :?

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

ik wil helemaal geen tags strippen. Als iemand een hele leuke nieuwe smiley heeft bedacht die er zo uitziet: <:-> dan moet dat toch gewoon kunnen?

Verwijderd

Topicstarter
RedHat schreef op 14 augustus 2002 @ 17:54:
[...]


zo deed ik dat ook altijd, dan wel iets anders:

$blaat = addslashes(htmlspecialchars(strip_tags($bericht)));
ok ok, dat is niet gek bedacht van jullie 2en ;)

dus deze code zou eigenlijk voldoende zijn?!?

PHP:
1
2
$text = strip_tags($text, "");
$text = addslashes(htmlspecialchars(strip_tags($bericht)));


en ik moet nl2br hebben, maar als ik dan dat beright edit met de edit functie die in ccmod admin systeem is gemaakt, dan ziet hij geen nieuwe regel, maar een <br /> zoals nl2br het maakt.
dus hoe kan ik er het beste voor zorgen dat als ik het beright edit dat hij nog steeds een nl(newline) ziet?
is er een commando om nl2br terug te draaien?
ik zou denken aan
PHP:
1
$text = str_replace("[br]", "\n", $text);

ik weet alleen niet of dat str_replace ook de \n als nieuwe regel ziet.

als dit werkt dan word de code in zijn totaal:
PHP:
1
2
3
$text = nl2br($text);  
$text = str_replace("<br />", "[br]", $text); 
$text = addslashes(htmlspecialchars(strip_tags($text)));


als ik dan dit heb gedaan dan zet ik het in de db, en als ik het dan laat zien aan de gebruiker, dan gooi ik er een BB-Code parser overheen.
zodra ik het ga editen dan moet ik dus zorgen dat [ br](zonder spatie) naar een nl(newline) word verandert.

dan klopt het toch?
dan sla ik eigenlijk alleen ubbcode op in de db en nix anders.
klop het allemaal wat ik hier nu wil?
en is dit veilig?

[ Voor 0% gewijzigd door Verwijderd op 14-08-2002 21:24 . Reden: deet iets dubbel met php :P ]


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ik doe geloof ik zoiets op het moment:

PHP:
1
2
3
    function format($str) {
        addslashes(nl2br(htmlspecialchars(eregi_replace('[^ ]{25,}', '...', trim($str)))));
    }


Die regex om te lange woorden weg te halen die je tabel structuur opbreken. (platform onafhankelijk)

Verwijderd

Topicstarter
Zoijar schreef op 14 augustus 2002 @ 22:00:
Ik doe geloof ik zoiets op het moment:

PHP:
1
2
3
    function format($str) {
        addslashes(nl2br(htmlspecialchars(eregi_replace('[^ ]{25,}', '...', trim($str)))));
    }


Die regex om te lange woorden weg te halen die je tabel structuur opbreken. (platform onafhankelijk)
ook niet een slecht idee om er een te langen woorden/zinnen systeem bij te maken ;)

even een losse vraag aan mensen hier:
in de eregi_replace gebruikt men altijd code's als [ ] ^ / \ { } etc.
waarom snap ik nooit een ruk van die code's en de manual :?
ergens een duidelijke manual in het nederlands?
normaal snap ik de php.net manual heel goed, maar nu dus echt niet.

Verwijderd

Verwijderd schreef op 14 augustus 2002 @ 21:22:
[...]

en ik moet nl2br hebben, maar als ik dan dat beright edit met de edit functie die in ccmod admin systeem is gemaakt, dan ziet hij geen nieuwe regel, maar een <br /> zoals nl2br het maakt.
dus hoe kan ik er het beste voor zorgen dat als ik het beright edit dat hij nog steeds een nl(newline) ziet?
is er een commando om nl2br terug te draaien?
ik zou denken aan
PHP:
1
$text = str_replace("[br]", "\n", $text);

ik weet alleen niet of dat str_replace ook de \n als nieuwe regel ziet.
nl2br heb ik in m'n output staan, evenals de smiley-replaces.
Tijdens het editten heb je hier dus geen last van...
Nadeel hiervan is dan wel dat als je lange teksten moet weergeven, deze allemaal door de functies heenmoeten, waardoor de page iewat langzamer laad.

Verwijderd

http://www.phpfreakz.com/artikelen.php?aid=8

Lees wel goed de reacties door, de schrijver heeft het nl niet helemaal begrepen ;) Ik heb hier ook m'n eerste stapjes in de eregi wereld gezet.

Verwijderd

Topicstarter
Verwijderd schreef op 15 augustus 2002 @ 23:36:
http://www.phpfreakz.com/artikelen.php?aid=8

Lees wel goed de reacties door, de schrijver heeft het nl niet helemaal begrepen ;) Ik heb hier ook m'n eerste stapjes in de eregi wereld gezet.
O+
tnx voor die url, hier heb ik veel aan.
Pagina: 1