Archief - HTML Filter voor comment systeem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Unrach

Legacy Member
Ik ben al een tijdje op google aant zoeken naar ne HTML filter maar vind niets specifiek wat ik nodig heb.

Ik heb namelijk en comment systeem, de comment word in een database opgeslagen en opgeroepen met ne echo.

Nu zou ik alle html en denk best ook javascript code willen filteren, buiten de "<br />" tag.

Weet iemand hoe ik dit kan oplossen?

Alvast bedankt!

Cycloon

Legacy Member
gebruik gewoon htmlentities() om speciale tekens op te slaan als html entiteiten, zo worden html codes niet uitgevoerd als html maar als teken.

Unrach

Legacy Member
thx.. heb al wat meer info hierover gevonde ;-) .. het ziet er naar uit dat dit het gene was waar ik op zoek naar was

Unrach

Legacy Member
dJeez zei:
strip_tags is daar wel handig voor, je kan dan makkelijk bepalen welke tags je wel en niet wil filteren...

Dat ziet er nog beter uit ja :D thx ;-) .. het werkt perfect ;-)

Nog een vraagje, hoe gevaarlijk is javascript in zo een comment systeem? Zou ik daar best ook iets voor zoeken if werkt die stiptag functie daar ook al wat voor?

TiZon

Legacy Member
Ik denk dat ge eerder een gevaar voor SQL-injectie hebt.
Zorg ervoor dat je geen SQL-statements in je comments kan uitvoeren, dat kan je doen met mysql_real_escape_string().

Hetzelfde geld voor login. Als ik bijvoorbeeld het volgende opgeef:
Username: ietsfout' OR 1=1--
Password: ietsfout' OR 1=1--

kan je bij sommige kleine scriptjes al wel eens binnen geraken ;)

Unrach

Legacy Member
dus gewoon "mysql_real_escape_string()" vanonder er bij zetten en het is opgelost?
Ik heb het gegoogled en ze geven wat voorbeelden waar ik nie veel snap.

Thx voor de waarschuwing btw :) .. had nog nooit van ne sql-injectie gehoord

edit:

Ik ga wachten tot mijne php scripter gedaan heeft met zijn exames. Die zal da wel snappe ;-)

TiZon

Legacy Member
Klein voorbeeldje alvast:
Als je een query opbouwt, doe je dat als volgt:

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));

Zo kan er niets geïnject worden wat niet zou mogen ;)
Maar als je veel velden gaat controlleren is dat soms een beetje ambetant. dus maak ik daar een functie check voor aan die dan de uitkomst van mysql_real_escape_string() terug geeft, als je dan nog controles op invoer wil doen, moet je die daar gewoon toevoegen ;)

Cycloon

Legacy Member
Er is meer gevaar dan enkel mysql injection (die overigens niks met het html probleem te maken heeft). Als een snugger iemand wat javascript in je comment box zet of een html redirect heb je direct een mooi effect.

/edit: Oja, MySQL injection voorkomen doe je best door prepared statements te gebruiken ipv zelf met die mysql_real_escape_string() te gaan prutsen.

exxhal

Legacy Member
Is dit stukje waterdicht ?

HTML:
# I was looking to remove all email address and links from post
# for a non-commercial posting website (like forum or classifieds)

# The function

<?PHP
function verify_email_and_link_in_post($c){
 # modify email addess and link with this:
 $l="LINKS ARE PROHIBITED ON THIS WEBSITE";
 $e="EMAIL ADDRESS ARE PROHIBITER ON THIS WEBSITE";
 # check for email address
 $c=ereg_replace".
   "("[-a-z0-9!#$%&\'*+/=?^_`{|}~]+@([.]?[a-zA-Z0-9_/-])*",".
   "$e,$c);
 # replace all sign @ with the letters at
 $c=ereg_replace".
   "("@", " at ",$c);
 # check for link HTML input
 $c=eregi_replace".
   "('(<a [^<]*href=["|\']?([^ "\']*)["|\']?[^>].*>([^<]*)</a>)',".
   "$l,$c);
 # check for anythink like http:// or ftp://
 $c=ereg_replace".
   "("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*",".
   "$l,$c);
 # check for anyhting starting with www.
 $c=ereg_replace".
   "("(^| )(www([-]*[.]?[a-zA-Z0-9_/-?&%])*)",".
   "$l,$c);
 # finaly check for anything like a-z.a-z
 $c=ereg_replace".
   "("[-a-z0-9!#$%&\'*+/=?^_`{|}~]+[.]+[-a-z0-9]",".
   "$l,$c);
 return $c;
}
?>
# hope this help someone ;-)

Unrach

Legacy Member
Cycloon zei:
Er is meer gevaar dan enkel mysql injection (die overigens niks met het html probleem te maken heeft). Als een snugger iemand wat javascript in je comment box zet of een html redirect heb je direct een mooi effect.

/edit: Oja, MySQL injection voorkomen doe je best door prepared statements te gebruiken ipv zelf met die mysql_real_escape_string() te gaan prutsen.

Javascript moet toch altijd eerst worden geopend door <script>
dus als ge die strip_tags filter gebruikt kan toch niemand javascripts invoeren?

Cycloon

Legacy Member
Unrach zei:
Javascript moet toch altijd eerst worden geopend door <script>
dus als ge die strip_tags filter gebruikt kan toch niemand javascripts invoeren?

Het was eerder een antwoord op tizon z'n post die laat uitschijnen dat er enkel gevaar is voor mysql injection. Ik vermoed wel dat die strip_tags ook <script> tags weghaalt en dan ben je idd safe :)

TiZon

Legacy Member
@Cycloon, Prepared statements zijn ook mogelijk, maar daarom niet de enige mogelijkheid. En over scripts blokken, dat leek me wel duidelijk uit de eerste posts :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan