Διαμόρφωση HTTP

Επισκόπηση των επιλογών διαμόρφωσης για το Nette HTTP.

Εάν δεν χρησιμοποιείτε ολόκληρο το framework, αλλά μόνο αυτή τη βιβλιοθήκη, διαβάστε πώς να φορτώσετε τη διαμόρφωση.

Κεφαλίδες HTTP

http:
	# κεφαλίδες που αποστέλλονται με κάθε αίτημα
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# επηρεάζει την κεφαλίδα X-Frame-Options
	frames: ...      # (string|bool) προεπιλογή είναι 'SAMEORIGIN'

Για λόγους ασφαλείας, το framework στέλνει την κεφαλίδα X-Frame-Options: SAMEORIGIN, η οποία δηλώνει ότι η σελίδα μπορεί να εμφανιστεί μέσα σε άλλη σελίδα (στο στοιχείο <iframe>) μόνο εάν βρίσκεται στο ίδιο domain. Αυτό μπορεί να είναι ανεπιθύμητο σε ορισμένες περιπτώσεις (για παράδειγμα, εάν αναπτύσσετε μια εφαρμογή για το Facebook), οπότε η συμπεριφορά μπορεί να αλλάξει ορίζοντας frames: http://allowed-host.com ή frames: true.

Πολιτική Ασφάλειας Περιεχομένου

Μπορείτε εύκολα να δημιουργήσετε κεφαλίδες Content-Security-Policy (εφεξής CSP), η περιγραφή τους βρίσκεται στην περιγραφή CSP. Οι οδηγίες CSP (όπως script-src) μπορούν να γραφτούν είτε ως συμβολοσειρές σύμφωνα με την προδιαγραφή, είτε ως πίνακες τιμών για καλύτερη αναγνωσιμότητα. Τότε δεν χρειάζεται να γράψετε εισαγωγικά γύρω από λέξεις-κλειδιά όπως 'self'. Το Nette δημιουργεί επίσης αυτόματα μια τιμή nonce, οπότε η κεφαλίδα θα περιέχει κάτι σαν 'nonce-y4PopTLM=='.

http:
	# Content Security Policy
	csp:
		# συμβολοσειρά στη μορφή σύμφωνα με την προδιαγραφή CSP
		default-src: "'self' https://example.com"

		# πίνακας τιμών
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# bool στην περίπτωση διακοπτών
		upgrade-insecure-requests: true
		block-all-mixed-content: false

Στα templates, χρησιμοποιήστε <script n:nonce>...</script> και η τιμή nonce θα συμπληρωθεί αυτόματα. Η δημιουργία ασφαλών ιστότοπων στο Nette είναι πραγματικά εύκολη.

Ομοίως, μπορείτε να δημιουργήσετε κεφαλίδες Content-Security-Policy-Report-Only (οι οποίες μπορούν να χρησιμοποιηθούν παράλληλα με το CSP) και Feature Policy:

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

Μπορείτε να αλλάξετε τις προεπιλεγμένες τιμές ορισμένων παραμέτρων της μεθόδου Nette\Http\Response::setCookie() και του session.

http:
	# εμβέλεια cookie ανά διαδρομή
	cookiePath: ...          # (string) προεπιλογή είναι '/'

	# domains που δέχονται cookies
	cookieDomain: 'example.com'  # (string|domain) προεπιλογή είναι μη ορισμένο

	# αποστολή cookies μόνο μέσω HTTPS;
	cookieSecure: ...        # (bool|auto) προεπιλογή είναι auto

	# απενεργοποιεί την αποστολή του cookie που χρησιμοποιείται από το Nette για προστασία από CSRF
	disableNetteCookie: ...  # (bool) προεπιλογή είναι false

Το attribute cookieDomain καθορίζει ποια domains μπορούν να δέχονται cookies. Εάν δεν καθοριστεί, το cookie γίνεται αποδεκτό από το ίδιο (υπο)domain που το όρισε, αλλά όχι από τα υποdomains του. Εάν το cookieDomain καθοριστεί, περιλαμβάνονται και τα υποdomains. Επομένως, ο καθορισμός του cookieDomain είναι λιγότερο περιοριστικός από την παράλειψή του.

Για παράδειγμα, με cookieDomain: nette.org, τα cookies είναι επίσης διαθέσιμα σε όλα τα υποdomains όπως το doc.nette.org. Αυτό μπορεί επίσης να επιτευχθεί χρησιμοποιώντας την ειδική τιμή domain, δηλαδή cookieDomain: domain.

Η προεπιλεγμένη τιμή auto για το attribute cookieSecure σημαίνει ότι εάν ο ιστότοπος εκτελείται σε HTTPS, τα cookies θα αποστέλλονται με τη σημαία Secure και επομένως θα είναι διαθέσιμα μόνο μέσω HTTPS.

HTTP proxy

Εάν ο ιστότοπος εκτελείται πίσω από ένα HTTP proxy, καθορίστε τη διεύθυνση IP του, ώστε η ανίχνευση σύνδεσης μέσω HTTPS και η διεύθυνση IP του client να λειτουργούν σωστά. Δηλαδή, ώστε οι συναρτήσεις Nette\Http\Request::getRemoteAddress() και isSecured() να επιστρέφουν τις σωστές τιμές και οι σύνδεσμοι με το πρωτόκολλο https: να δημιουργούνται στα templates.

http:
	# Διεύθυνση IP, εύρος (π.χ., 127.0.0.1/8), ή πίνακας αυτών των τιμών
	proxy: 127.0.0.1       # (string|string[]) προεπιλογή είναι μη ορισμένο

Session

Βασικές ρυθμίσεις sessions:

session:
	# εμφάνιση του πίνακα session στο Tracy Bar;
	debugger: ...        # (bool) προεπιλογή είναι false

	# χρόνος αδράνειας μετά τον οποίο λήγει το session
	expiration: 14 days  # (string) προεπιλογή είναι '3 hours'

	# πότε πρέπει να ξεκινήσει το session;
	autoStart: ...       # (smart|always|never) προεπιλογή είναι 'smart'

	# handler, μια υπηρεσία που υλοποιεί το interface SessionHandlerInterface
	handler: @handlerService

Η επιλογή autoStart ελέγχει πότε πρέπει να ξεκινήσει το session. Η τιμή always σημαίνει ότι το session θα ξεκινά πάντα με την εκκίνηση της εφαρμογής. Η τιμή smart σημαίνει ότι το session θα ξεκινά κατά την εκκίνηση της εφαρμογής μόνο εάν υπάρχει ήδη, ή τη στιγμή που θέλουμε να διαβάσουμε ή να γράψουμε σε αυτό. Τέλος, η τιμή never απενεργοποιεί την αυτόματη έναρξη του session.

Επιπλέον, μπορείτε να ορίσετε όλες τις PHP session directives (σε μορφή camelCase) καθώς και το readAndClose. Παράδειγμα:

session:
	# γράψτε το 'session.name' ως 'name'
	name: MYID

	# γράψτε το 'session.save_path' ως 'savePath'
	savePath: "%tempDir%/sessions"

Το session cookie αποστέλλεται με τις ίδιες παραμέτρους όπως άλλα cookie, αλλά μπορείτε να τις αλλάξετε για αυτό:

session:
	# domains που δέχονται cookies
	cookieDomain: 'example.com'   # (string|domain)

	# περιορισμός κατά την πρόσβαση από άλλο domain
	cookieSamesite: None          # (Strict|Lax|None) προεπιλογή είναι Lax

Το attribute cookieSamesite επηρεάζει εάν το cookie θα αποσταλεί κατά την πρόσβαση από άλλο domain, το οποίο παρέχει κάποια προστασία έναντι επιθέσεων Cross-Site Request Forgery (CSRF).

Υπηρεσίες DI

Αυτές οι υπηρεσίες προστίθενται στο DI container:

Όνομα Τύπος Περιγραφή
http.request Nette\Http\Request HTTP request
http.response Nette\Http\Response HTTP response
session.session Nette\Http\Session διαχείριση session
έκδοση: 4.0