MySQLតើធ្វើដូចម្តេចដើម្បីការពារការចាក់ sql? គោលការណ៍ចាក់ SQL និងការការពារ
MySQL និងការចាក់ SQL
ប្រសិនបើអ្នកយកទិន្នន័យដែលបានបញ្ចូលដោយអ្នកប្រើប្រាស់តាមរយៈគេហទំព័រមួយ ហើយបញ្ចូលវាទៅក្នុង aមូលដ្ឋានទិន្នន័យ 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. កុំប្រើ dynamic assembly sql អ្នកអាចប្រើ parameterized sql ឬប្រើដោយផ្ទាល់នូវនីតិវិធីដែលបានរក្សាទុកសម្រាប់សំណួរ និងការចូលប្រើទិន្នន័យ។
- 3. កុំប្រើការភ្ជាប់មូលដ្ឋានទិន្នន័យជាមួយសិទ្ធិអ្នកគ្រប់គ្រង ប្រើការភ្ជាប់មូលដ្ឋានទិន្នន័យដាច់ដោយឡែកជាមួយនឹងសិទ្ធិមានកំណត់សម្រាប់កម្មវិធីនីមួយៗ។
- 4. កុំរក្សាទុកព័ត៌មានសម្ងាត់ដោយផ្ទាល់ អ៊ិនគ្រីប ឬលុបពាក្យសម្ងាត់ និងព័ត៌មានរសើប។
- 5. ព័ត៌មានលើកលែងនៃកម្មវិធីគួរតែផ្តល់ការណែនាំតិចតួចតាមដែលអាចធ្វើទៅបាន ហើយវាជាការល្អបំផុតក្នុងការប្រើព័ត៌មានកំហុសផ្ទាល់ខ្លួនដើម្បីរុំព័ត៌មានកំហុសដើម។
- 6. វិធីសាស្រ្តរកឃើញនៃការចាក់ sql ជាទូទៅទទួលយកជំនួយ软件។ឬវេទិកាគេហទំព័រដើម្បីស្វែងរក ជាទូទៅកម្មវិធីប្រើឧបករណ៍ស្វែងរកការចាក់ sql jsky វេទិកាគេហទំព័រមានឧបករណ៍ស្វែងរកវេទិកាសុវត្ថិភាពគេហទំព័រ Yisi ។ MDCSOFT SCAN et al ។ការប្រើប្រាស់ 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}'");
ការចាក់ក្នុងសេចក្តីថ្លែងការណ៍ដូច
នៅពេលសួរដូចជា ប្រសិនបើអ្នកប្រើបញ្ចូលតម្លៃជាមួយ "_" និង "%" វានឹងកើតឡើង៖ ដើមឡើយអ្នកប្រើប្រាស់ចង់សួរ "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() បន្ថែម backslash មុនតួអក្សរដែលបានបញ្ជាក់។
ទម្រង់វាក្យសម្ព័ន្ធ៖
addcslashes(string,characters)
ប៉ារ៉ាម៉ែត្រ | ការពិពណ៌នា |
---|---|
ខ្សែអក្សរ | ទាមទារ។បញ្ជាក់ខ្សែអក្សរដែលត្រូវពិនិត្យ។ |
តួអក្សរ | ស្រេចចិត្ត។បញ្ជាក់តួអក្សរ ឬជួរនៃតួអក្សរដែលរងផលប៉ះពាល់ដោយ addcslashes() ។ |
Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) shared "តើ MySQL ការពារការបញ្ចូល sql យ៉ាងដូចម្តេច? គោលការណ៍ចាក់ sql និងការការពារ" វានឹងជួយអ្នក។
សូមស្វាគមន៍ចំពោះការចែករំលែកតំណភ្ជាប់នៃអត្ថបទនេះ៖https://www.chenweiliang.com/cwl-500.html
សូមស្វាគមន៍មកកាន់ឆានែល Telegram នៃប្លុករបស់ Chen Weiliang ដើម្បីទទួលបានព័ត៌មានថ្មីៗចុងក្រោយបង្អស់!
📚 មគ្គុទ្ទេសក៍នេះមានតម្លៃមហាសាល 🌟នេះជាឱកាសដ៏កម្រ សូមកុំអូសរំលង! ⏰⌛💨
Share និង Like ប្រសិនបើអ្នកចូលចិត្ត!
ការចែករំលែក និងការចូលចិត្តរបស់អ្នកគឺជាការលើកទឹកចិត្តបន្តរបស់យើង!