როგორ აფერხებს MySQL sql ინექციას? SQL ინექციის პრინციპი და პრევენცია

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-ის ბლოგის ტელეგრამის არხზე, რომ მიიღოთ უახლესი განახლებები!

🔔 იყავით პირველი, ვინც მიიღეთ ღირებული "ChatGPT Content Marketing AI Tool Usage Guide" არხის ზედა დირექტორიაში! 🌟
📚 ეს სახელმძღვანელო შეიცავს უზარმაზარ ღირებულებას, 🌟ეს იშვიათი შესაძლებლობაა, არ გამოტოვოთ! ⏰⌛💨
გააზიარეთ და მოიწონეთ თუ მოგეწონათ!
თქვენი გაზიარება და მოწონებები ჩვენი უწყვეტი მოტივაციაა!

 

评论

თქვენი ელ.ფოსტის მისამართი არ გამოქვეყნდება. გამოყენებულია აუცილებელი ველები * ლეიბლი

გადახვევა ზევით