HTTP Yapılandırması

Nette HTTP'nin yapılandırma seçeneklerine genel bakış.

Framework'ün tamamını değil yalnızca bu kütüphaneyi kullanıyorsanız, yapılandırmanın nasıl yükleneceğini okuyun.

HTTP Header'ları

http:
	# her yanıtla birlikte gönderilen header'lar
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# X-Frame-Options header'ını etkiler
	frames: ...      # (string|bool|null) varsayılan 'SAMEORIGIN'

Nette, güvenlik nedeniyle X-Frame-Options: SAMEORIGIN header'ını gönderir; bu, bir sayfanın başka bir sayfanın içinde (bir <iframe> elemanında) yalnızca aynı alan adındaysa görüntülenebileceğini belirtir. Bu, belirli durumlarda istenmeyebilir (örneğin bir Facebook uygulaması geliştiriyorsanız); dolayısıyla davranış, belirli bir host'a izin vermek için frames: http://allowed-host.com, her yerden çerçevelemeye izin vermek için frames: true (header atlanır) ya da tümüyle yasaklamak için frames: false (X-Frame-Options: DENY) ayarlanarak değiştirilebilir.

Nette ayrıca varsayılan olarak X-Powered-By: Nette Framework 3 ve Content-Type: text/html; charset=utf-8 header'larını gönderir. Bu varsayılanlar dahil herhangi bir header'ı, değerini boş dize yaparak kaldırabilirsiniz.

Content Security Policy

Content-Security-Policy (CSP) header'ları kolayca yapılandırılabilir; açıklamaları CSP belirtiminde bulunabilir. CSP yönergeleri (örneğin script-src) ya belirtime göre dize olarak ya da daha iyi okunurluk için değer dizileri olarak yazılabilir. O zaman 'self' gibi anahtar sözcüklerin çevresinde tırnak kullanmaya gerek kalmaz. Nette ayrıca bir nonce değerini otomatik üretir, dolayısıyla header'da 'nonce-y4PopTLM==' gibi bir şey gönderilir.

http:
	# Content Security Policy
	csp:
		# CSP belirtimine göre dize
		default-src: "'self' https://example.com"

		# değer dizisi
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# anahtarlarda bool
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Şablonlarda <script n:nonce>...</script> kullanın; nonce değeri otomatik doldurulur. Nette'te güvenli web siteleri yapmak gerçekten kolaydır.

Benzer şekilde, Content-Security-Policy-Report-Only header'ları (CSP ile eşzamanlı kullanılabilir) ve Feature Policy de yapılandırılabilir:

http:
	# Content Security Policy Report-Only
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Feature Policy
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com

HTTP Çerezi

Nette\Http\Response::setCookie() metodunun bazı parametrelerinin ve oturum yönetiminin varsayılan değerlerini değiştirebilirsiniz.

http:
	# çerezin yola göre kapsamı
	cookiePath: ...          # (string) varsayılan '/'

	# çerezi alabilecek alan adları
	cookieDomain: 'example.com'  # (string|domain) varsayılan olarak ayarsız

	# çerezler yalnızca HTTPS üzerinden mi gönderilsin?
	cookieSecure: ...        # (bool|auto) varsayılan auto

	# Nette'in CSRF koruması için kullandığı çerezin gönderilmesini kapatır
	disableNetteCookie: ...  # (bool) varsayılan false

cookieDomain niteliği, çerezleri hangi alan adlarının (kaynakların) kabul edebileceğini belirler. Belirtilmezse çerez, onu ayarlayan aynı (alt) alan adı tarafından kabul edilir, alt alan adları hariç. cookieDomain belirtilirse alt alan adları da dahil olur. Bu yüzden cookieDomain belirtmek, onu atlamaktan daha az kısıtlayıcıdır.

Örneğin cookieDomain: nette.org ayarlanırsa, çerezler doc.nette.org gibi tüm alt alan adlarında da kullanılabilir. Bu, özel domain değeriyle, yani cookieDomain: domain ile de sağlanabilir.

cookieSecure niteliğinin varsayılan auto değeri, web sitesi HTTPS üzerinde çalışıyorsa çerezlerin Secure bayrağıyla gönderileceği ve dolayısıyla yalnızca HTTPS üzerinden kullanılabileceği anlamına gelir.

HTTP Proxy

Site bir HTTP proxy'nin arkasında çalışıyorsa, HTTPS bağlantısı saptamasının ve istemcinin IP adresinin doğru çalışması için proxy'nin IP adresini girin. Yani Nette\Http\Request::getRemoteAddress() ve isSecured() metotlarının doğru değerleri döndürmesi ve şablonlarda bağlantıların https: protokolüyle üretilmesi için.

http:
	# IP adresi, aralık (örneğin 127.0.0.1/8) ya da bu değerlerden oluşan bir dizi
	proxy: 127.0.0.1       # (string|string[]) varsayılan olarak ayarsız

HTTPS'i Zorlama

İsteğin şemasını koşulsuz olarak HTTPS'e zorlar. Bu, TLS'i sonlandıran ama X-Forwarded-Proto header'ını iletmeyen bir yük dengeleyici ya da ters proxy arkasında çalışan, yalnızca HTTPS kullanan siteler için yararlıdır; çünkü standart HTTPS saptaması (HTTP Proxy yapılandırılmış olsa bile) bunu yakalayamaz.

http:
	# tüm isteklerde HTTPS şemasını zorla
	forceHttps: true       # (bool) varsayılan false

Oturum

Temel oturum ayarları:

session:
	# oturum paneli Tracy Bar'da gösterilsin mi?
	debugger: ...        # (bool) varsayılan false

	# oturumun sona ereceği hareketsizlik süresi
	expiration: 14 days  # (string) varsayılan '3 hours'

	# oturum ne zaman başlasın?
	autoStart: ...       # (smart|always|never) varsayılan 'smart'

	# handler, SessionHandlerInterface uygulayan bir servis
	handler: @handlerService

autoStart seçeneği, oturumun ne zaman başlaması gerektiğini denetler. always değeri, oturumun uygulama her başladığında başlaması demektir. smart değeri, oturumun uygulamayla birlikte yalnızca zaten varsa ya da ondan okumak veya ona yazmak istediğimiz anda başlaması demektir. Son olarak never değeri, oturumun otomatik başlamasını kapatır.

Ayrıca tüm PHP oturum yönergelerini (camelCase biçiminde) ve ayrıca readAndClose seçeneğini ayarlayabilirsiniz. Örnek:

session:
	# 'session.name', 'name' olarak yazılır
	name: MYID

	# 'session.save_path', 'savePath' olarak yazılır
	savePath: "%tempDir%/sessions"

Oturum Çerezi

Oturum çerezi diğer çerezlerle aynı parametrelerle gönderilir, ama bunları özellikle onun için değiştirebilirsiniz:

session:
	# çerezi alabilecek alan adları
	cookieDomain: 'example.com'   # (string|domain)

	# kaynaklar arası erişim kısıtı
	cookieSamesite: None          # (Strict|Lax|None) varsayılan Lax

cookieSamesite niteliği, çerezin kaynaklar arası isteklerde gönderilip gönderilmeyeceğini etkiler; bu da Cross-Site Request Forgery (CSRF) saldırılarına karşı bir ölçüde koruma sağlar.

DI Servisleri

DI container'a şu servisler eklenir:

Ad Tür Açıklama
http.request Nette\Http\Request HTTP isteği
http.response Nette\Http\Response HTTP yanıtı
session.session Nette\Http\Session oturum yönetimi
http.requestFactory Nette\Http\RequestFactory HTTP isteğini oluşturan factory
versiyon: 4.x