Διαμόρφωση 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
HTTP cookie
Μπορείτε να αλλάξετε τις προεπιλεγμένες τιμές ορισμένων παραμέτρων της μεθόδου 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
Το 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 |