តើ MySQL ការពារការចាក់ sql យ៉ាងដូចម្តេច? គោលការណ៍ចាក់ SQL និងការការពារ

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 ដើម្បីទទួលបានព័ត៌មានថ្មីៗចុងក្រោយបង្អស់!

🔔 ក្លាយជាអ្នកដំបូងដែលទទួលបាន "ការណែនាំអំពីការប្រើប្រាស់ឧបករណ៍ AI ទីផ្សារមាតិកា ChatGPT" ដ៏មានតម្លៃនៅក្នុងបញ្ជីកំពូលរបស់ប៉ុស្តិ៍! 🌟
📚 មគ្គុទ្ទេសក៍នេះមានតម្លៃមហាសាល 🌟នេះជាឱកាសដ៏កម្រ សូមកុំអូសរំលង! ⏰⌛💨
Share និង Like ប្រសិនបើអ្នកចូលចិត្ត!
ការចែករំលែក និងការចូលចិត្តរបស់អ្នកគឺជាការលើកទឹកចិត្តបន្តរបស់យើង!

 

发表评论។

អាសយដ្ឋានអ៊ីមែលរបស់អ្នកនឹងមិនត្រូវបានផ្សព្វផ្សាយទេ។ 必填项已用។ * 标注។

រំកិលទៅកំពូល