სტატიების დირექტორია
MySQLროგორ ავიცილოთ თავიდან sql ინექცია? SQL ინექციის პრინციპი და პრევენცია
MySQL და SQL ინექცია
თუ თქვენ იღებთ მომხმარებლის მიერ შეყვანილ მონაცემებს ვებ გვერდიდან და ჩასვით მასშიMySQL მონაცემთა ბაზა, მაშინ შეიძლება იყოს SQL ინექციის უსაფრთხოების პრობლემები.
ეს თავი გაგაცნობთ, თუ როგორ აიცილოთ თავიდან SQL ინექცია და გამოიყენოთ სკრიპტები SQL-ში შეყვანილი სიმბოლოების გასაფილტრად.
ეგრეთ წოდებული SQL ინექცია არის სერვერის მოტყუება, რათა შეასრულოს მავნე SQL ბრძანებები ვებ ფორმაში SQL ბრძანებების ჩასმით, რათა წარადგინოს ან შეიყვანოს შეკითხვის სტრიქონი დომენის სახელის ან გვერდის მოთხოვნის შესახებ.
ჩვენ არასდროს არ უნდა ვენდოთ მომხმარებლის შეყვანას, უნდა ვივარაუდოთ, რომ მომხმარებლის შეყვანის მონაცემები სახიფათოა და ჩვენ ყველას გვჭირდება მომხმარებლის შეყვანის მონაცემების გაფილტვრა.
შემდეგ მაგალითში, შეყვანილი მომხმარებლის სახელი უნდა იყოს ასოების, რიცხვების და ქვედა ხაზის კომბინაცია, ხოლო მომხმარებლის სახელი უნდა იყოს 8-დან 20 სიმბოლომდე:
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysqli_query($conn, "SELECT * FROM users WHERE username=$matches[0]"); } else { echo "username 输入异常"; }
მოდით შევხედოთ SQL სიტუაციას, რომელიც ხდება მაშინ, როდესაც სპეციალური სიმბოლოები არ არის გაფილტრული:
// 设定$name 中插入了我们不需要的SQL语句 $name = "Qadir'; DELETE FROM users;"; mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
ზემოაღნიშნული ინექციის განცხადებაში ჩვენ არ გავფილტრეთ $name-ის ცვლადი და SQL განცხადება, რომელიც არ გვჭირდება, ჩასმულია $name-ში, რომელიც წაშლის ყველა მონაცემს მომხმარებლების ცხრილში.
mysqli_query()-ში PHP-ში არ არის დაშვებული მრავალი SQL განცხადების შესრულება, მაგრამ SQLite-სა და PostgreSQL-ში მრავალი SQL განცხადების შესრულება შესაძლებელია ერთდროულად, ამიტომ საჭიროა მკაცრად გადავამოწმოთ ამ მომხმარებლების მონაცემები.
SQL ინექციის თავიდან ასაცილებლად, ყურადღება უნდა მივაქციოთ შემდეგ პუნქტებს:
- 1. არასოდეს ენდოთ მომხმარებლის შეყვანას.შეამოწმეთ მომხმარებლის შეყვანა, შეგიძლიათ გამოიყენოთ რეგულარული გამონათქვამები, ან შეზღუდოთ სიგრძე; გადაიყვანოთ ერთჯერადი ბრჭყალები და ორმაგი "-" და ა.შ.
- 2. არასოდეს გამოიყენოთ დინამიური ასამბლეის sql, შეგიძლიათ გამოიყენოთ პარამეტრიზებული sql ან პირდაპირ გამოიყენოთ შენახული პროცედურები მონაცემთა მოთხოვნისა და წვდომისთვის.
- 3. არასოდეს გამოიყენოთ მონაცემთა ბაზის კავშირები ადმინისტრატორის პრივილეგიებით, გამოიყენეთ მონაცემთა ბაზის ცალკეული კავშირები შეზღუდული პრივილეგიებით თითოეული აპლიკაციისთვის.
- 4. არ შეინახოთ კონფიდენციალური ინფორმაცია უშუალოდ, არ დაშიფროთ ან არ გაშალოთ პაროლები და მგრძნობიარე ინფორმაცია.
- 5. აპლიკაციის გამონაკლისმა ინფორმაციამ უნდა მოგვცეს რაც შეიძლება ნაკლები მინიშნება და უმჯობესია გამოიყენოთ შეცდომის შესახებ მორგებული ინფორმაცია თავდაპირველი შეცდომის ინფორმაციის შესაფუთად.
- 6. sql ინექციის გამოვლენის მეთოდი ზოგადად იღებს დამხმარეს软件ან ვებსაიტის პლატფორმის გამოსავლენად, პროგრამული უზრუნველყოფა ზოგადად იყენებს sql ინექციის აღმოჩენის ინსტრუმენტს jsky, ვებსაიტის პლატფორმას აქვს Yisi ვებსაიტის უსაფრთხოების პლატფორმის აღმოჩენის ინსტრუმენტი. MDCSOFT SCAN და სხვ.MDCSOFT-IPS-ის გამოყენებით შეგიძლიათ ეფექტურად დაიცვათ SQL ინექციისგან, XSS შეტევებისგან და ა.შ.
SQL ინექციის თავიდან აცილება
სკრიპტირების ენებში, როგორიცაა Perl და PHP, შეგიძლიათ გაექცეთ მომხმარებლის მიერ შეყვანილ მონაცემებს SQL ინექციის თავიდან ასაცილებლად.
MySQL გაფართოება PHP-ისთვის უზრუნველყოფს mysqli_real_escape_string() ფუნქციას სპეციალური შეყვანის სიმბოლოებისგან თავის დასაღწევად.
if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysqli_real_escape_string($conn, $name); mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
ინექცია Like განცხადებებში
მსგავსი მოთხოვნისას, თუ მომხმარებელი შეიყვანს მნიშვნელობებს "_" და "%"-ით, ეს მოხდება: მომხმარებელს თავდაპირველად სურდა შეეკითხა "abcd_", მაგრამ შეკითხვის შედეგები მოიცავს "abcd_", "abcde" და "abcdf". " და ა.შ.; პრობლემა ასევე ჩნდება, როდესაც მომხმარებელს სურს მოითხოვოს "30%" (შენიშვნა: ოცდაათი პროცენტი).
PHP სკრიპტში ჩვენ შეგვიძლია გამოვიყენოთ addcslashes() ფუნქცია ზემოაღნიშნული სიტუაციის მოსაგვარებლად, როგორც შემდეგ მაგალითში:
$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_"); // $sub == \%something\_ mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
ფუნქცია addcslashes() ამატებს უკანა ხაზს მითითებულ სიმბოლომდე.
სინტაქსის ფორმატი:
addcslashes(string,characters)
参数 | აღწერა |
---|---|
სიმებიანი | საჭირო.განსაზღვრავს შესამოწმებელ სტრიქონს. |
პერსონაჟი | სურვილისამებრ.განსაზღვრავს სიმბოლოს ან დიაპაზონს, რომელზეც გავლენას ახდენს addcslashes(). |
იმედი ჩენ ვეილიანგის ბლოგი ( https://www.chenweiliang.com/ ) გააზიარა „როგორ უშლის MySQL sql ინექციას? sql ინექციის პრინციპი და პრევენცია”, ეს დაგეხმარებათ.
კეთილი იყოს თქვენი მობრძანება ამ სტატიის ბმულის გასაზიარებლად:https://www.chenweiliang.com/cwl-500.html
კეთილი იყოს თქვენი მობრძანება Chen Weiliang-ის ბლოგის ტელეგრამის არხზე, რომ მიიღოთ უახლესი განახლებები!
📚 ეს სახელმძღვანელო შეიცავს უზარმაზარ ღირებულებას, 🌟ეს იშვიათი შესაძლებლობაა, არ გამოტოვოთ! ⏰⌛💨
გააზიარეთ და მოიწონეთ თუ მოგეწონათ!
თქვენი გაზიარება და მოწონებები ჩვენი უწყვეტი მოტივაციაა!