login  Naam:   Wachtwoord: 
Registreer je!
 Forum

XSS prevention (Opgelost)

Offline Martijn2008 - 05/01/2010 21:02 (laatste wijziging 05/01/2010 21:02)
Avatar van Martijn2008PHP beginner Hallo allemaal,

Ik wil graag voorkomen dat er javascript d.m.v. UBB in mijn website terecht komt. In een link kan dit op verschillende manieren. 2 voorbeelden zijn
- <a href="javascipt:alert('hoi')">link</a>
- <a href="<script>alert('hoi');</script>">link</a>

Hoe voorkom ik dit?

Martijn

12 antwoorden

Gesponsorde links
Offline vinTage - 05/01/2010 21:09
Avatar van vinTage Nieuw lid Een manier zou een regex kunnen zijn die controleert of je wel een valid url post.

Offline Martijn2008 - 05/01/2010 21:17
Avatar van Martijn2008 PHP beginner Bestaat er niet een mogelijkheid om te filtreren op javascript en de script-tags. Volgens mij is dat in mijn project gemakkelijker te implementeren.

Ik kwam dit probleem tegen toen ik op phpFreakz de hacking guide doornam(eerder genoemd in deze topic). In deze tutorial wordt ook een voorstel gedaan voor een functie, die dit probleem zou oplossen. Alleen werkt deze functie bij mij niet.
Offline vinTage - 05/01/2010 21:18 (laatste wijziging 05/01/2010 21:19)
Avatar van vinTage Nieuw lid en als iemand dan een url wil posten naar
javascript.com ?

en hoe ziet die functie eruit, ik heb geen zin om heel die pdf door te bladeren op zoek ernaar.
Offline Martijn2008 - 05/01/2010 21:24
Avatar van Martijn2008 PHP beginner
  1. <?php
  2.  
  3. /* noXSS (a)
  4. * String a: Input that you want to print in a
  5. *
  6. * Description
  7. * Use this function if you want to print user input as an argument in a HTML
  8. * tag. Don't allow XSS JS attacks in your webapplication and use this function
  9. * instead of using htmlspecialchars(), which doesn't protect you against the
  10. * javascript: protocol.
  11. *
  12. * Return
  13. * It will return false if
  14. * the beginning of the input string contains 'javascript:', otherwise it will
  15. * return
  16. *
  17. * Examples
  18. * <?php
  19. * print '<a href="'.$_GET['input'].'>link</a>';
  20. * ?>
  21. *
  22. * input: 'javascript:alert()' output: bool false
  23. * input: 'JAVAscript:alert()' output: bool false
  24. * input: ' javascript:alert()' output: bool false
  25. * input: '&#32;javascript:alert()' output: bool false
  26. * input: 'javas&#99;ript:alert()' output: bool false
  27. * input: '&#32;Javas&#99;ript:alert()' output: bool false
  28. * input: 'test <a href="#">' output: test &lt;a href=&quot;#&quot;&gt;yo
  29. * input: '"><script>alert()</script><"' output: &quot;&gt;&lt;script&gt;alert()
  30. &lt;/script&gt;&lt;&quot;
  31. * input: "'><script>alert()</script><'" output: &#039;&gt;&lt;script&gt;alert()
  32. &lt;/script&gt;&lt;&#039;
  33. */
  34. function noXSS ($input)
  35. {
  36. // convert all input charakters to lowercase and convert ascii encoded charakters to normal charakters
  37. $inputTmp = trim(asciiDecode(strtolower($input)));
  38.  
  39. // check if the user wants to execute javascript
  40.  
  41. if (substr($inputTmp, 0, 11) == 'javascript:')
  42. {
  43. trigger_error("Someone tried to exploit our UBB system! Original input: '$input'", E_USER_WARNING);
  44. return false;
  45. }
  46. // replace: <, >, &, ", ' to ascii encoded values
  47. return htmlspecialchars($input, ENT_QUOTES);
  48. }
  49.  
  50. /* asciiDecode (a)
  51. * String a: Text string
  52. *
  53. * Description
  54. * All ASCII codes will be decoded in their represented value.
  55. */
  56.  
  57. function asciiDecode($input)
  58. {
  59. // get all ASCII encoded values
  60. preg_match_all("(&#([0-9]{1,3});)", $input, $matches);
  61. $asciiCodes = array_unique($matches[1]);
  62. // replace them with their representing value
  63. foreach ($asciiCodes as $asciiNr)
  64. $input = str_replace("&#$asciiNr;", chr($asciiNr), $input);
  65. return $input;
  66. }
  67.  
  68. ?>
Offline vinTage - 05/01/2010 21:40 (laatste wijziging 05/01/2010 21:41)
Avatar van vinTage Nieuw lid werkt toch ?
  1. $linkjes = array("javascript:alert('abc')", "bla.com");
  2.  
  3. foreach($linkjes as $link)
  4. {
  5. if(noXSS($link))
  6. {
  7. echo $link.' = goed<br />';
  8. }
  9. else
  10. {
  11. echo $link.' = kl*te<br />';
  12. }
  13. }

en je ziet met dit arraytje ook die error die die functie genereert.
Offline Martijn2008 - 05/01/2010 23:19 (laatste wijziging 05/01/2010 23:20)
Avatar van Martijn2008 PHP beginner ThnX, weet je misschien ook hoe ik het op de juiste manier in deze functie verwerk? Of kan het misschien toch gemakkelijker met een regex? 

  1. <?php
  2.  
  3. function ubb($Input)
  4. {
  5. $Subject = stripslashes($Input);
  6.  
  7. //patern => replacement
  8. $Elements = array(
  9. '/\[url\](.*?)\[\/url\]/is' => '<a href="$1">$2</a>',
  10. '/\[url=(.*?)\[\/url\]/is' => '<a href="$1">$2</a>',
  11. '/\[img\](.*?)\[\/img\]/is' => '<img src="$1" />'
  12. );
  13.  
  14. $Subject = preg_replace(array_keys($Elements), $Elements, $Subject);
  15.  
  16. return $Subject;
  17. }
  18.  
  19. ?>
Offline vinTage - 05/01/2010 23:44
Avatar van vinTage Nieuw lid gah, je maakt al gebruik van regexes, dus waarom die ene functie nog gebruiken ?

Zoek gewoon een fatsoenlijke regex en klaar (al sta ik ook open voor andere opties)
Offline Martijn2008 - 05/01/2010 23:48
Avatar van Martijn2008 PHP beginner Mja, ik ben zo verschrikkelijk slecht met regexes hè. Had er net ook 1 gevonden, die erin geplakt, kreeg toen ineens een php error 
Offline Koen - 06/01/2010 00:00
Avatar van Koen PHP expert HTML Purifier, staat tussen de downloads.
Offline vinTage - 06/01/2010 00:02 (laatste wijziging 06/01/2010 00:03)
Avatar van vinTage Nieuw lid
Martijn2008 schreef:
Mja, ik ben zo verschrikkelijk slecht met regexes hè. Had er net ook 1 gevonden, die erin geplakt, kreeg toen ineens een php error 


Daar zijn we vet mee, jij krijgt geeneens een functie aan de gang 

@Koen, linkje, ik ben ook benieuwd en geen zin om te zoeken 
Offline Koen - 06/01/2010 00:06
Avatar van Koen PHP expert
vinTage schreef:
[..quote..]

Daar zijn we vet mee, jij krijgt geeneens een functie aan de gang 

@Koen, linkje, ik ben ook benieuwd en geen zin om te zoeken 

http://www.sitemasters.be/zoeken/html%20purifier
Bedankt door: Martijn2008
Offline vinTage - 06/01/2010 00:09 (laatste wijziging 06/01/2010 02:13)
Avatar van vinTage Nieuw lid wow, wat een brok dingesen, ik heb al spijt van mn vraag 
Ik hou het toch maar bij wat simpele functies 


vet late edit:
Net (uit verveling) hun demo bekeken, en dat werkt nog best nice, mss toch eens wat nader besnuffelen 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.212s