Skip to content

Latest commit

 

History

History
91 lines (72 loc) · 10.9 KB

README-el.md

File metadata and controls

91 lines (72 loc) · 10.9 KB

English | 繁中版 | 简中版 | العربية | বাংলা | Čeština | Deutsch | Español | فارسی | Français | हिंदी | Indonesia | Italiano | 日本語 | 한국어 | ພາສາລາວ | Македонски | മലയാളം | Монгол | Nederlands | Polski | Português (Brasil) | Русский | ไทย | Türkçe | Українська | Tiếng Việt

API λίστα ελέγχου ασφαλείας

Λίστα με τα πιο σημαντικά μέτρα ασφαλείας στον σχεδιασμό, έλεγχο, και την έκδοση του API σας.


Επικύρωση ασφαλείας (Authentication)

  • Μη χρησιμοποιήτε Basic Auth. Χρησιμοποιήστε standard authentication (π.χ. JWT, OAuth).
  • Μην προσπαθήσετε να επανεφεύρετε τον τροχό για Authentication, token generation, password storage. Χρησιμοποιήστε ήδη υπάρχων βιβλιοθήκες.
  • Χρησιμοποιήστε Max Retry και jail features κατά τη σύνδεση (Login).
  • Χρησιμοποιήστε κρυπτογράφηση (encryption) για όλα τα σημαντικά δεδομένα.

JWT (JSON Web Token)

  • Χρησιμοποιήστε τυχαίο περίπλοκο κλειδί (JWT Secret) για να γίνει αρκετά δύσκολο να αποκρυπτογραφηθεί με brute forcing.
  • Μη χρησιμοποιήτε/αφαιρήτε τον αλγόριθμο απο το payload. Ο αλγόριθμος πρέπει να πραγματοποιήτε στο backend (HS256 ή RS256).
  • Κάντε το token να λήγει (token expiration) (TTL, RTTL) όσο πιο σύντομα γίνεται.
  • Μη καταχωρείτε ευαίσθητα δεδομένα στο JWT payload, μπορεί να αποκρυπτογραφηθεί εύκολα easily.
  • Αποφύγετε την αποθήκευση πάρα πολλών δεδομένων. JWT είναι συνήθως κοινόχρηστο σε headers και έχουν όριο μεγέθους.

Πρόσβαση (Access)

  • Περιορίστε τα αιτήματα (requests) (Throttling) για να αποφύγετε επιθέσεις DDoS / brute-force.
  • Χρησιμοποιήστε HTTPS στο server side για να αποφύγετε επιθέσεις MITM (Man in the Middle Attack).
  • Χρησιμοποιήστε HSTS κεφαλίδα (header) με SSL για να αποφύγετε SSL Strip επιθέσεις.
  • Απενεργοποιήστε τις καταχωρίσεις directory.
  • Για ιδιωτικά API, επιτρέπεται η πρόσβαση μόνο από IP/κεντρικούς στη λίστα επιτρεπόμενων.

Authorization

OAuth

  • Πάντα να επαληθεύετε το redirect_uri στο server-side και επιτρέπετε μόνο whitelisted URLs.
  • Πάντα να προσπαθήτε να ανταλλάσετε auth code και όχι tokens (μην επιτρέπετε response_type=token).
  • Χρησιμοποιήστε state παράμετρο με τυχαίο περίπλοκο κλειδί (hash) για να αποτρέψετε CSRF κατα τη διάρκεια της OAuth authentication διαδικασίας.
  • Ορίστε το προεπιλεγμένο πεδίο (default scope), και επικυρώστε τις παραμέτρους πεδίου (scope parameters) για κάθε εφαρμογή.

Είσοδος δεδομένων (Input)

  • Χρησιμοποιήστε την κατάλληλη HTTP μέθοδο σύμφωνα με τη λειτουργία που χρειάζεστε: GET (read), POST (create), PUT/PATCH (replace/update), και DELETE (για διαγραφή αρχείου), και απαντήστε με 405 Method Not Allowed εάν η ζητούμενη μέθοδος δεν είναι κατάλληλη για την αιτούμενη εφαρμογή.
  • Επικυρώστε content-type στη ζητούμενη Accept κεφαλίδα (Content Negotiation) για να επιτρέψετε μόνο το format που υποστηρίζετε (π.χ. application/xml, application/json, κτλ.) και απαντήστε με 406 Not Acceptable εάν δεν το υποστηρίζετε.
  • Επικυρώστε content-type δεδομένα που στέλνετε, με τον ίδιο τρόπο όπως τα δέχεστε (π.χ. application/x-www-form-urlencoded, multipart/form-data, application/json, κτλ.).
  • Επικυρώστε την οποιαδήποτε είσοδο δεδομένων απο τους χρήστες, για να αποφύγετε τα κοινά κενά ασφαλείας (π.χ. XSS, SQL-Injection, Remote Code Execution, κτλ.).
  • Μη χρησιμοποιήτε ευαίσθητα δεδομένα (credentials, Passwords, security tokens, ή API keys) στο URL, αλλά χρησιμοποιήστε τη κοινή Authorization κεφαλίδα (standard Authorization header).
  • Χρησιμοποιήστε μόνο κρυπτογράφηση από την πλευρά του διακομιστή.
  • Χρησιμοποιήστε API Gateway service για να ενεργοποιήσετε caching, Rate Limit policies (π.χ. Quota, Spike Arrest, ή Concurrent Rate Limit) και κάντε deploy APIs resources δυναμικά.

Επεξεργασία (Processing)

  • Ελέγξτε ότι όλα τα endpoints είναι προστατευμένα πίσω από επικύρωση ασφαλείας(authentication) για να αποφύγετε προβλήματα λανθασμένης επικύρωσης (broken authentication process).
  • Μη χρησιμοποιήτε το ID των χρηστών. Χρησιμοποιήστε /me/orders αντί /user/654321/orders.
  • Μη χρησιμοποιήτε την αυτόματη αύξηση των IDs. Χρησιμοποιήστε UUID αντι αυτου.
  • Εάν επεργάζεστε XML αρχεία, σιγουρευτείτε ότι το entity parsing δεν είναι ενεργοποιημένο, για να αποφύγετε XXE (επίθεση XML external entity).
  • Εάν επεργάζεστε XML αρχεία, σιγουρευτείτε ότι το entity expansion δεν είναι ενεργοποιημένο, για να αποφύγετε Billion Laughs/XML bomb δια μέσου exponential entity expansion επίθεσης.
  • Χρησιμοποιήστε CDN για την φόρτωση αρχείων (file uploads).
  • Εάν επεξεργάζεστε μεγάλο αριθμο δεδομένων, χρησιμοποιήστε Workers και Queues για να γίνετε η επεξεργασία στο background και να γίνεται η επιστροφή απάντησης πολύ πιο γρήγορα, αποφεύγοντας HTTP Blocking.
  • Μην ξεχνάτε να απενεργοποιήσετε το DEBUG mode.
  • Χρησιμοποιήστε μη εκτελέσιμες στοίβες όταν είναι διαθέσιμες.

Αποστολή/Επιστροφή δεδομένων (Output)

  • Αποστέλετε X-Content-Type-Options: nosniff κεφαλίδα (header).
  • Αποστέλετε X-Frame-Options: deny κεφαλίδα (header).
  • Αποστέλετε Content-Security-Policy: default-src 'none' κεφαλίδα (header).
  • Αφαιρέστε fingerprinting κεφαλίδεs (headers) - X-Powered-By, Server, X-AspNet-Version, κτλ.
  • Εξαναγκάστε το content-type να υπάρχει στην απάντηση (response), εάν η απάντηση είναι application/json τότε η απάντηση content-type πρέπει να είναι application/json.
  • Μην επιστρέφετε ευαίσθητα δεδομένα, όπως: credentials, Passwords, ή security tokens.
  • Επιστρέψτε τον κατάλληλο κωδικό κατάστασης σύμφωνα με τη διαδικασία που ολοκληρώθηκε. (π.χ. 200 OK, 400 Bad Request, 401 Unauthorized, 405 Method Not Allowed, κτλ.).

CI & CD

  • Ελέγξτε το σχεδιασμό και την κατάσταση της εφαρμογή σας με επαρκή κάλυψη τεστ Unit / integration.
  • Χρησιμοποιήτε code review διαδικασίες και μη δέχεστε self-approval απο την ομάδα.
  • Εξασφαλίστε ότι όλα τα στοιχέια των υπηρεσιών σας περνούν απο στατικό έλεγχο με AV software πριν τα αναρτήσετε στο production, συμπεριλαμβανομένου οποιασδήποτε εξωτερικής βιβλιοθήκης που μπορει να χρησιμοποιήτε.
  • Εκτελείτε συνεχώς δοκιμές ασφαλείας (στατική/δυναμική ανάλυση) στον κώδικά σας.
  • Ελέγξτε τις εξαρτήσεις σας (τόσο το λογισμικό όσο και το λειτουργικό σύστημα) για γνωστά τρωτά σημεία.
  • Σχεδιάστε rollback διαδικασίες για deployments.

Monitoring

  • Use centralized logins for all services and components.
  • Use agents to monitor all traffic, errors, requests, and responses.
  • Use alerts for SMS, Slack, Email, Telegram, Kibana, Cloudwatch, etc.
  • Ensure that you aren't logging any sensitive data like credit cards, passwords, PINs, etc.
  • Use an IDS and/or IPS system to monitor your API requests and instances.

Δείτε επίσης:


Συνεισφορά

Μη διστάσετε να συμβάλλετε με το να κάνετε forking αυτό το repository, κάνοντας αλλαγές και υποβάλλοντας pull requests. Για οποιεσδήποτε ερωτήσεις στείλτε μας ένα email στο [email protected].