Пар пута годишње проверавам садржај на серверу, унапређујем и тестирам шта год ми падне на памет. Једна од ствари о којима бринем је спречавање хотлинкинга тј. спречавање аутора на интернет презентацији, коју ћемо да зовемо "АБВ" у даљем тексту, да оставља директне везе до слика са моје презентације и тиме користи моје ресурсе на својој локацији. Циљ је да спречимо АБВ да потроши сав месечни проток код вашег пружалаца услуга зато што не добијамо тј. не можемо сви да приуштимо 1 терабајт протока месечно (које АБВ може да потроши уместо мене). На крају крајева: изазов је подесити овај механизам стога је забавно у старту.
HTTP_REFERER и REQUEST_FILENAME методе
Апач код за .htaccess је релативно прост, уколико знате шта вам је неопходно:
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} \.(jpe?g?|gif|png|webp|svg?z)$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://([^.]+\.)?ВАШ_ДОМЕН\. [NC]
#RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://\1/.* [NC]
RewriteRule \.(jpe?g?|gif|png|webp|svg?z)$ - [F,NC,L]
</ifModule>
Уколико се не пошаље захтев са ваше локације или затражите наведени тип датотеке, нећете моћи да учитате садржај на АБВ презентацији. Ова правила садрже 2 критеријума по којима се блокира приказ садржаја на АБВ локацији стога је приступ поприлично добар.
Cross-Origin-Resource-Policy
Друга опција је коришћење Cross-Origin-Resource-Policy
заглавља. Практично, ово заглавље контролише проверу извора тренутне везе у односу на извор захтева тј. да ли АБВ тражи ресурс са АБВ или са ђура.ин.рс.
Оно што ми је занимљиво јесте да се ова метода може користити за блокирање хотлинкинга и то у значајно мање корака. За простије, статичне презентације, ово је можда и боље решење него први метод. За комплексније презентације и прогресивне веб апликације је ово теже подесити стога захтева одређено искуство са серверима.
Најпростије решење је дефинисање заглавља следећом линијом:
Header always set Cross-Origin-Resource-Policy same-origin
Код је сличан и за енџиникс (енгл. nginx)
add_header 'Cross-Origin-Resource-Policy' 'same-origin';
као и за lighttpd, кроз mod_setenv
setenv.add-response-header = ( "Cross-Origin-Resource-Policy" => "same-origin" )
Када подесите заглавље, тестирање у Хромијуму даје следећи резултат када АБВ покуша да учита слику са моје локације:
Да би користио овај ресурс из другог извора, сервер може да ублажи заглавље одговора у вези са смерницама за ресурсе из различитих извора:
Cross-Origin-Resource-Policy: same-site - Одаберите ову опцију ако се ресурс и документ приказују са истог сајта.
Cross-Origin-Resource-Policy: cross-origin - Одаберите ову опцију само ако произвољни веб-сајт који обухвата овај ресурс не представља безбедносни ризик.
Сервер шаље статус 403 што може бити корисно за дневник дешавања. Поприлично згодно зар не?