Custom HTML ve iframe Erişimi
Custom HTML sayfaları, animasyon çerçeveleri, raporlar ve dashboard’lar ayrı bir sandbox
portundan (varsayılan 8083) iframe içinde açılır. Ayrı port bir izolasyon sınırıdır: bu
içerik sandbox="allow-scripts" ile, kendi kaynağında çalışır.
Bu sayfa, aynı kurulumun hem yerel ağdan hem dış adresten (tipik olarak Secure Access) kullanıldığı durumu anlatır. İki erişim yolu da aynı anda çalışabilir, ama tarayıcı tarafındaki izinlerin her yol için ayrı ayrı verilmesi gerekir.
Çerçeve adresini kim belirler
Section titled “Çerçeve adresini kim belirler”Çerçevenin adresini sunucu değil tarayıcı kurar:
${location.protocol}//${location.hostname}:${sandboxPort}sandboxPort değeri GET /api/config cevabından gelir. Sonuç: kullanıcı hangi adresten
girdiyse çerçeve o adresin 8083 portundan açılır. Çerçeve böylece her zaman uygulamayla
aynı ana makineye düşer — ana makineye bağlı çerezler ona ulaşır.
Hangi ayar neyi besler
Section titled “Hangi ayar neyi besler”Üç ayrı denetim vardır ve aynı ayardan beslenmezler. Bir erişim yolunun çalışması için üçünün de o yolu tanıması gerekir.
| Ayar | Neyi besler | Biçim |
|---|---|---|
ins.app.url, ins.sandbox.url, ins.frontend.url | HostAllowlist’e birebir origin olarak girer — CORS ve sandbox Referer/Origin denetimi | Her biri tek değer |
ins.allowed-hosts | HostAllowlist’e host regex’i ekler; port kısıtı yoktur | Tek regex |
ins.iframe.allowed-hosts | Ana sayfanın CSP’sindeki frame-src ve frame-ancestors, ve animasyonun dış iframe doğrulaması | Virgülle ayrılmış liste |
ins.iframe.allowed-hosts listesinin iki ayrı tüketicisi olduğu için iki biçim birlikte
yazılır:
- CSP yönergeleri somut origin ister (
https://makine:8083). Bu yönergeler sabit bir liste olmak zorundadır: sandbox yanıtı üretilirken üst çerçevenin adresi henüz bilinmez, dolayısıyla istek anında türetilen çerçeve adresinin bu listede önceden bulunması gerekir. - Animasyonun dış iframe doğrulaması ise adresi çıplak host adıyla karşılaştırır
(
makine). Bu doğrulama fail-closed’dır: liste boşsa her adres reddedilir.
ins.allowed-hosts verilirken dikkat
Section titled “ins.allowed-hosts verilirken dikkat”Bu regex yerel varsayılanların yerine geçer, onlara eklenmez. Varsayılanlar şunlardır:
localhost127.*- Secure Access tünel ağı
10.66.66.*
Regex’i verirken bunları da içine yazmazsanız, önceden çalışan tünel erişimi ya da sunucunun kendi üzerinden erişim bozulur.
Kurulum
Section titled “Kurulum”ins.app.urlveins.sandbox.urldış adresi göstersin.- Yerel ağ IP’sini ya da makine adını
ins.allowed-hostsregex’ine ekleyin — yanınalocalhost,127.0.0.1ve tünel ağını da yazın (yukarıdaki uyarı). ins.iframe.allowed-hostslistesine her erişim yolu için şunları ekleyin:8082ve8083origin’leri- çıplak host adı
localhostve127.0.0.1’in origin’leri de buna dahildir. Bunlar HostAllowlist’te varsayılan olarak vardır ama CSPframe-src’e kendiliğinden girmez; yazılmazsa sunucunun kendi üzerindehttps://localhost:8082ile girildiğinde Custom HTML açılmaz.
- Yerel ağdan erişim için güvenlik duvarında
8082ve8083gelen bağlantıya açık olmalıdır. Tünel trafiği güvenlik duvarına takılmaz. - Sertifika yerel IP’yi kapsamıyorsa, tarayıcı
8083’ün sertifikasını ayrıca kabul etmelidir:https://<yerel-ip>:8083adresi bir kez doğrudan açılır. Kabul edilmezse çerçeve hata vermeden boş kalır.
Ayarlar <kurulum>\config\application.yml dosyasına yazılır ve ardından inSCADA servisi
yeniden başlatılır. JVM -D parametresi ya da servis tanımında değişiklik gerekmez.
ins: app: url: https://<firma>.inscada.online sandbox: url: https://<firma>.inscada.online:8083 allowed-hosts: '^(localhost|127\.0\.0\.1|<yerel-ip-kaçışlı>|10\.66\.66\.\d{1,3})$' iframe: allowed-hosts: >- https://<firma>.inscada.online, https://<firma>.inscada.online:8083, https://<yerel-ip>:8082, https://<yerel-ip>:8083, https://localhost:8082, https://localhost:8083, https://127.0.0.1:8082, https://127.0.0.1:8083, <firma>.inscada.online, <yerel-ip>, localhost, 127.0.0.1Köşeli parantezli değerler yer tutucudur. Regex içinde IP adresinin noktaları kaçırılır
(192\.168\.1\.50).
Doğrulama
Section titled “Doğrulama”Açılış günlüğünde şu iki satır görülür:
HostAllowlist: using explicit override regex from ins.allowed-hostsHostAllowlist initialized. literalOrigins=[...], localPorts=[...], defaultsInEffect=falsedefaultsInEffect=false, regex’inizin devreye girdiğini ve varsayılanların artık geçerli
olmadığını söyler — 3. maddedeki uyarı tam olarak bu yüzdendir.
Ardından her erişim adresinde yanıtın Content-Security-Policy başlığına bakın:
frame-src, o adresin :8083 origin’ini içermelidir.
Son olarak tarayıcıda bir Custom HTML sayfası ya da animasyon açın. Bu, sandbox kaynağını ve çerez akışını uçtan uca sınar.
Sorun giderme
Section titled “Sorun giderme”Çerçeve açılmıyorsa önce DevTools’ta iframe’in src değerine bakın — hangi adresi denediğini
görmek, hangi listenin eksik olduğunu söyler.
| Belirti | Anlamı |
|---|---|
Günlükte Missing or invalid origin for sandbox content | Adres HostAllowlist’te eksik — ins.allowed-hosts ya da duyurulan adresler |
Konsolda frame-src / frame-ancestors CSP ihlali | Adres ins.iframe.allowed-hosts listesinde eksik |
| Çerçeve boş, hata yok | 8083’ün sertifikası kabul edilmemiş — adresi bir kez doğrudan açın |
Günlükte Sandbox port used for illegal API call | Normaldir. Sandbox portu /api çağrılarını reddeder |
Yeni bir erişim adresi eklerken
Section titled “Yeni bir erişim adresi eklerken”- Host’u
ins.allowed-hostsregex’ine ekleyin. https://<host>:8082,https://<host>:8083ve çıplak<host>’uins.iframe.allowed-hostslistesine ekleyin.- Servisi yeniden başlatın.