stripchar - អនាម័យនៃការបញ្ចូល - សំណួរដែលមានប៉ារ៉ាម៉ែត្រ

ហេតុអ្វីបានជា Stripchar មិនបានរារាំងការវាយប្រហារដោយការចាក់នោះ

ប្រសិនបើអ្នកប្រើ stripchar ដើម្បីសម្អាតការបញ្ចូលរបស់អ្នកប្រើប្រាស់ អ្នកមិនឯកាទេ។ អ្នកអភិវឌ្ឍន៍ជាច្រើនពឹងផ្អែកលើប្រភេទនេះ ការបញ្ចូលអនាម័យ ដើម្បីរារាំងការប៉ុនប៉ងចាក់។ នៅពេលមើលដំបូង វាហាក់ដូចជាសមហេតុផល លុបតួអក្សរគ្រោះថ្នាក់ ហើយបន្ទុកទិន្នន័យបាត់ទៅវិញ។ ទោះជាយ៉ាងណាក៏ដោយ វិធីសាស្រ្តនេះផ្តល់នូវអារម្មណ៍មិនពិតនៃសុវត្ថិភាព។ តាមពិតទៅ អ្នកវាយប្រហារអាចរំលងតម្រងសាមញ្ញដូចជា stripchar ការប្រើ បន្ទុក​ដែល​មិន​ច្បាស់លាស់ការអ៊ិនកូដ ឬការប្តូរបរិបទដ៏ឆ្លាតវៃ។ នោះហើយជាមូលហេតុដែលអ្នកអភិវឌ្ឍន៍ឆ្លាតវៃមិនឈប់ត្រឹមហ្នឹងទេ។ ផ្ទុយទៅវិញ ពួកគេប្រើ សំណួរដែលមានប៉ារ៉ាម៉ែត្រដែលការពារការវាយប្រហារដោយការចាក់នៅឫស។

នៅក្នុង​អត្ថបទ​នេះ អ្នកនឹង​រៀន​ពី​មូលហេតុ stripchar បរាជ័យក្នុងសេណារីយ៉ូពិភពពិត របៀបដែលអ្នកវាយប្រហារប្រើប្រាស់តម្រងទាំងនេះខុស និងជម្រើសសុវត្ថិភាពអ្វីខ្លះដែលពិតជាដំណើរការ។ យើងនឹងពន្យល់ពីឧទាហរណ៍កូដ បង្ហាញបច្ចេកទេស bypass ទូទៅ និងពន្យល់ពីរបៀប ការបញ្ចូលអនាម័យ ត្រូវតែភ្ជាប់ជាមួយការការពាររចនាសម្ព័ន្ធដូចជា សំណួរដែលមានប៉ារ៉ាម៉ែត្រឬអ្នកនឹងនៅតែងាយរងគ្រោះ។

អ្វី​ stripchar ពិតជាធ្វើ (និងមិនមែន)

អ្នកអភិវឌ្ឍន៍ជាច្រើនប្រើប្រាស់ stripchar ឬមុខងារស្រដៀងគ្នាដើម្បីលុបតួអក្សរដែលមិនមានសុវត្ថិភាពចេញពីការបញ្ចូលរបស់អ្នកប្រើប្រាស់។ ជាធម្មតា វាលុបសញ្ញាវណ្ណយុត្តិ និមិត្តសញ្ញាពិសេស ឬអ្វីដែលមិនមែនជាអក្សរក្រមលេខ។ ដំបូងឡើយ វាស្តាប់ទៅដូចជា ការបញ្ចូលអនាម័យប៉ុន្តែវាមិនមែនជាការការពារពិតប្រាកដទេ។

ចូរយើងវិភាគវា។ អនុគមន៍ដូចនេះ៖

				
					function stripchar(input) {
  return input.replace(/[^\w\s]/gi, '');
}

				
			

លុបតួអក្សរដូចជា ', ";ដូច្នេះប្រសិនបើអ្នកបញ្ចូល៖

				
					'; DROP TABLE users; --

				
			

វាក្លាយជា៖

				
					DROP TABLE users

				
			

ទោះបីជាការបញ្ចូលរបស់អ្នកប្រើប្រាស់មើលទៅស្អាតក៏ដោយ អ្នកវាយប្រហារនៅតែអាចចាក់បញ្ចូលទិន្នន័យ SQL ដោយប្រើតក្កវិជ្ជាតែម្នាក់ឯង ជាពិសេសនៅពេលដែលកម្មវិធីបង្កើតសំណួរតាមរយៈការភ្ជាប់ខ្សែអក្សរ។ ដើម្បីទប់ស្កាត់ការចាក់ SQL យ៉ាងពិតប្រាកដអ្នកត្រូវតែប្រើសំណួរដែលមានប៉ារ៉ាម៉ែត្រ និងការគ្រប់គ្រងការបញ្ចូលដែលដឹងអំពីបរិបទ។ តម្រងតួអក្សរដូចជា stripchar() គ្រាន់តែមិនគ្រប់គ្រាន់ទេ។

ពិតណាស់ ការបញ្ចូលដែលត្រូវបានដកចេញអាចមើលទៅមានសុវត្ថិភាពជាងនៅពេលមើលមួយភ្លែត។ ទោះជាយ៉ាងណាក៏ដោយ វិធីសាស្រ្តនេះមិនបន្សាបតក្កវិជ្ជាព្យាបាទទេ វាគ្រាន់តែផ្លាស់ប្តូររបៀបដែលវាត្រូវបានសរសេរប៉ុណ្ណោះ។ តាមពិតទៅ អ្នកវាយប្រហារច្រើនតែទាញយកអត្ថប្រយោជន៍ពីរឿងនេះដោយការអ៊ិនកូដបន្ទុកទិន្នន័យ បញ្ចូលចន្លោះទទេ ឬប្រើតួអក្សរដែលត្រូវបានដកចេញជាយុទ្ធសាស្ត្រដើម្បីរំលងតម្រងរបស់អ្នកទាំងស្រុង។

ក្រៅពីនេះ, stripchar ខ្វះបរិបទសំខាន់។ វាមិនដឹងថាតើការបញ្ចូលកំពុងឆ្ពោះទៅកាន់មូលដ្ឋានទិន្នន័យ សែល ឬកម្មវិធីរុករកតាមអ៊ីនធឺណិតទេ។ នោះមានន័យថាវាមិនអាចអនុវត្តការគេចចេញ ឬការអ៊ិនកូដត្រឹមត្រូវបានទេ។ ការសម្អាតការបញ្ចូលដោយមិនដឹងពីគោលដៅគឺដូចជាការគេចចេញពី HTML ខណៈពេលដែលការគំរាមកំហែងពិតប្រាកដគឺ SQLi.

នៅ​ចុងបញ្ចប់, stripchar  មិនបកស្រាយ ឬធានាសុវត្ថិភាពអ្វីទាំងអស់ វាគ្រាន់តែកែសម្រួលខ្សែអក្សរប៉ុណ្ណោះ។ ហើយការកែសម្រួលមិនមែនជាសុវត្ថិភាពទេ។ ប្រសិនបើអ្នកចង់បានការការពារពិតប្រាកដ សូមប្រើសំណួរដែលមានរចនាសម្ព័ន្ធ មានសុពលភាព និងកំណត់ប៉ារ៉ាម៉ែត្រ។ ចំណុចពេញលេញ។

ដើម្បីធ្វើឱ្យភាពខុសគ្នាកាន់តែច្បាស់ នេះជារបៀបដែល stripchar ប្រៀបធៀបជាមួយសំណួរដែលមានប៉ារ៉ាម៉ែត្រ៖

Stripchar ទល់នឹង Parameterized Queries៖ តើមួយណាពិតជាការពារកូដរបស់អ្នក?

លក្ខណៈពិសេសstripchar()សំណួរដែលកំណត់ប៉ារ៉ាម៉ែត្រ
កម្រិតការការពារការសម្អាតខ្សែអក្សរមូលដ្ឋាន។ ងាយស្រួលរំលងដោយប្រើល្បិចអ៊ិនកូដ ឬតក្កវិជ្ជា។ការការពារដ៏រឹងមាំប្រឆាំងនឹងការចាក់ SQL គ្រប់ទម្រង់។
ការយល់ដឹងអំពីបរិបទមិន​អើពើ​នឹង​បរិបទ (SQL, HTML, shell ។ល។)។ អនុវត្ត​ច្បាប់​ដូចគ្នា​នៅ​គ្រប់​ទីកន្លែង។យល់ដឹងពីបរិបទទាំងស្រុង។ ប្រើប្រាស់ការគេចចេញត្រឹមត្រូវសម្រាប់បរិស្ថាននីមួយៗ។
កិច្ចខិតខំប្រឹងប្រែងរបស់អ្នកអភិវឌ្ឍន៍អនុវត្តបានរហ័ស ប៉ុន្តែមិនគួរទុកចិត្តសម្រាប់ការប្រើប្រាស់រយៈពេលវែង។តម្រូវឱ្យមានការធ្វើសមាហរណកម្មត្រឹមត្រូវ ប៉ុន្តែរឹងមាំ និងធន់នឹងអនាគត។
ភាពធន់នឹងផ្លូវវាងទាប — អ្នកវាយប្រហារសម្របខ្លួនបានយ៉ាងងាយស្រួលដោយប្រើចន្លោះទទេ ការអ៊ិនកូដ ឬតក្កវិជ្ជា។ខ្ពស់ — បំបែកកូដចេញពីទិន្នន័យ និងរារាំងការចាក់បញ្ចូលបានយ៉ាងមានប្រសិទ្ធភាព។
ទំនុកចិត្តលើសុវត្ថិភាពអារម្មណ៍សុវត្ថិភាពមិនពិត — អាចលាក់បាំងបញ្ហាដោយមិនចាំបាច់ជួសជុលវា។ឧស្សាហកម្មដែលគួរឱ្យទុកចិត្ត standard សម្រាប់ការប្រតិបត្តិសំណួរដែលមានសុវត្ថិភាព។

របៀបដែលអ្នកវាយប្រហាររំលងការសម្អាតធាតុចូល

នេះជារបៀបដែលលំហូរងាយរងគ្រោះធម្មតាមើលទៅនៅពេលដែលអ្នកអភិវឌ្ឍន៍ពឹងផ្អែកលើ stripchar សម្រាប់ការសម្អាតធាតុចូល៖

stripchar - អនាម័យនៃការបញ្ចូល - សំណួរដែលមានប៉ារ៉ាម៉ែត្រ

អ្នកវាយប្រហារមិនចាំបាច់បំបែកតម្រងរបស់អ្នកទេ ពួកគេគ្រាន់តែត្រូវការ ទៅជុំវិញពួកគេនៅពេលដែលអ្នកអភិវឌ្ឍន៍ពឹងផ្អែកលើ stripchar សម្រាប់ការសម្អាតការបញ្ចូល ពួកគេច្រើនតែសន្មតថាការដកតួអក្សរដូចជាសញ្ញាសម្រង់ ឬសញ្ញាក្បៀសនឹងរារាំងការប៉ុនប៉ងបញ្ចូល។ ទោះជាយ៉ាងណាក៏ដោយ អ្នកវាយប្រហារសម្របខ្លួនបានយ៉ាងឆាប់រហ័ស។ ពួកគេបង្កើត បន្ទុក​ដែល​មិន​ច្បាស់លាស់ ដែលរអិលឆ្លងកាត់តម្រងដែលមានមូលដ្ឋានលើ regex ជាពិសេសនៅពេលដែលតម្រងទាំងនោះខ្វះបរិបទ។

ឧទាហរណ៍ ឧបមាថាអ្នកព្យាយាមសម្អាតការបញ្ចូលដូចនេះ៖

				
					const input = stripchar(userInput);
// safe to use? maybe not.
db.query("SELECT * FROM users WHERE name = '" + input + "'");

				
			

ទោះបីជាអ្នកប្រើប្រាស់មិនអាចដាក់ស្នើបុរាណបានក៏ដោយ ' OR 1=1 --ពួកគេអាចប្រើល្បិចយូនីកូដ ការភ្ជាប់ខ្សែអក្សរ ឬវាក្យសម្ព័ន្ធដែលខូចដែលនៅតែដំណើរការ។ បន្ទុកការងារដូចនេះច្រើនតែដំណើរការ៖

				
					0x27206F7220313D31--  
				
			

ឬ:

				
					'+UNION+SELECT+null,null,null--
				
			

ប្រសិនបើអនុគមន៍របស់អ្នកដកតួអក្សរដែលមិនមែនជាពាក្យចេញ អ្នកអាច សាងសង់ឡើងវិញដោយចៃដន្យនូវពាក្យបញ្ជា SQL ដែលមានសុពលភាពអ្វីដែលអាក្រក់ជាងនេះទៅទៀត អ្នកវាយប្រហារអាចអ៊ិនកូដតម្លៃតាមរបៀបដែលឆ្លងកាត់តម្រងរបស់អ្នក ប៉ុន្តែត្រូវបានឌិគ្រីបដោយប្រព័ន្ធគោលដៅ។

ក្រៅពីការចាក់ SQL stripchar បរាជ័យក្នុងបរិបទផ្សេងទៀតដែរ ដូចជាពាក្យបញ្ជាសែល ផ្លូវឯកសារ ឬសូម្បីតែការប្រតិបត្តិ JavaScript។ ដោយសារវាខ្វះការយល់ដឹងអំពីកន្លែងដែលការបញ្ចូលនឹងត្រូវបានប្រើ វាមិនអាចអនុវត្តការគេចចេញ ឬការផ្ទៀងផ្ទាត់បានត្រឹមត្រូវទេ។

ជា​លទ្ធផល, ការបញ្ចូលអនាម័យ ជាមួយ stripchar ងាយស្រួល​រំលង។ សុវត្ថិភាព​ពិតប្រាកដ​កើតចេញពី ការគ្រប់គ្រងដែលដឹងអំពីបរិបទជាពិសេស។ សំណួរដែលមានប៉ារ៉ាម៉ែត្រ ដែលការពារការចាក់ឡូជីខលទាំងស្រុង។

ហេតុអ្វីបានជាអ្នកគួរប្រើ Parameterized Query ជំនួសវិញ

ប្រសិនបើអ្នកចង់បញ្ឈប់ការវាយប្រហារដោយការចាក់ថ្នាំពិតប្រាកដ អ្នកត្រូវ ឈប់បង្កើតសំណួរជាមួយខ្សែអក្សរ។ នោះហើយជាកន្លែង សំណួរដែលមានប៉ារ៉ាម៉ែត្រ ចូលមក។ មិនដូច stripcharពួកគេមិនត្រងទេ ពួកគេ បំបែកលេខកូដពីទិន្នន័យ នៅកម្រិតម៉ាស៊ីន។

ចូរយើងពិនិត្យមើលសំណួរដែលខូចឡើងវិញ៖

				
					const input = stripchar(userInput);
const query = "SELECT * FROM users WHERE name = '" + input + "'";
				
			

នេះមានគ្រោះថ្នាក់ណាស់ ពីព្រោះការបញ្ចូលត្រូវបានចាក់ដោយផ្ទាល់ទៅក្នុង SQL។ សូម្បីតែជាមួយនឹងការដកតួអក្សរចេញក៏ដោយ អ្នកនៅតែកំពុងបង្កើតខ្សែអក្សរដែលអាចត្រូវបានគេប្រើប្រាស់ខុស។ ផ្ទុយទៅវិញ សូមប្រើសំណួរដែលមានប៉ារ៉ាម៉ែត្រដូចនេះ៖

				
					const query = "SELECT * FROM users WHERE name = ?";
db.execute(query, [userInput]);
				
			

នៅទីនេះ កម្មវិធីបញ្ជាមូលដ្ឋានទិន្នន័យដឹងថា userInput គឺជាទិន្នន័យ កូដដែលមិនអាចប្រតិបត្តិបានវាគេចចេញពីវាដោយស្វ័យប្រវត្តិ ហើយរារាំងការចាក់បញ្ចូល ទោះបីជាការបញ្ចូលមានសញ្ញាសម្រង់ សញ្ញាក្បៀស ឬបន្ទុកដែលបានអ៊ិនកូដដោយ hex ក៏ដោយ។

នៅក្នុង Python៖

				
					cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,))
				
			

នៅក្នុង PHP ជាមួយ PDO៖

				
					$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute(['name' => $input]);

				
			

នៅទូទាំងឧទាហរណ៍ទាំងអស់នេះ សំណួរដែលមានប៉ារ៉ាម៉ែត្រ ការពារការចាក់ដោយមិនចាំបាច់ទាយថាតួអង្គណាដែលអាចមានគ្រោះថ្នាក់។ អ្នកមិនត្រូវការ ស្ទ្រីបឆា, អ្នកត្រូវការការកសាងសំណួរដែលមានរចនាសម្ព័ន្ធ និងយល់ដឹងពីបរិបទ។

លើសពីនេះ បច្ចេកទេសនេះរារាំង payloads ដែលមានភាពមិនច្បាស់លាស់ ល្បិច Unicode និងការរំលងការអ៊ិនកូដ ដែលជាគំរូគេចវេសដូចគ្នាដែលត្រូវបានរកឃើញនៅក្នុង ភាពងាយរងគ្រោះ XSSឧបករណ៍ដូចជា Xygeni ចាប់បានការគំរាមកំហែងទាំងនេះតាំងពីដំបូង SAST ការវិភាគ.

សរុបមក ការការពារពិតប្រាកដមិនពឹងផ្អែកលើតម្រងទេ។ ពួកវាពឹងផ្អែកលើពិធីការ API ដែលគួរឱ្យទុកចិត្ត និងបរិបទពេញលេញ។ ប្រសិនបើអ្នកប្រើក្របខ័ណ្ឌ ឬការចាក់បញ្ចូលសេវាកម្មថាមវន្ត សូមប្រយ័ត្នអំពីរបៀបដែលធាតុចូលរីករាលដាលតាមរយៈមូលដ្ឋានកូដរបស់អ្នក។ ការចាក់បញ្ចូលការពឹងផ្អែកដែលមានសុវត្ថិភាព ធានាថាសូម្បីតែលំហូរស្មុគស្មាញក៏មិនបើកផ្ទៃវាយប្រហារថ្មីដែរ។

កុំពឹងផ្អែកលើ stripcharប្រើ Xygeni ដើម្បីអនុវត្តការការពារពិតប្រាកដ

ទោះបីជាអ្នកប្រើ សំណួរដែលមានប៉ារ៉ាម៉ែត្រ, មិនមានការធានាថាមូលដ្ឋានកូដទាំងមូលរបស់អ្នកធ្វើតាមដូចគ្នានោះទេ standardតក្កវិជ្ជាចាស់ៗ ស្គ្រីបភាគីទីបី ឬបន្ទាត់ដែលត្រូវបានមើលរំលងនៅក្នុង PR នៅតែអាចបង្កឱ្យមានហានិភ័យនៃការចាក់បញ្ចូល។ នោះហើយជាកន្លែងដែល Xygeni ជួយ។

Xygeni ស្កេនកូដប្រភពរបស់អ្នក pull requestsនិង ស៊ី.អាយ. pipelines ដើម្បីចាប់៖

  • ខ្សែអក្សរសំណួរដែលបង្កើត SQL ជាមួយនឹងការភ្ជាប់គ្នា
  • តម្រងខ្សោយ ឬតម្រងផលិតនៅផ្ទះដូចជា stripchar
  • តក្កវិជ្ជាគួរឱ្យសង្ស័យដែលត្រូវគ្នានឹងបន្ទុកព័ត៌មានដែលមិនច្បាស់លាស់ដែលគេស្គាល់

អ្នកមិនចាំបាច់រកមើលគ្រប់បន្ទាត់ទេ។ Xygeni សម្គាល់គំរូដែលមិនមានសុវត្ថិភាពជាមុន ហើយអាចអនុវត្តបាន ជួសជុលដោយស្វ័យប្រវត្តិ កន្លែងណាដែលអាចធ្វើទៅបាន ហើយអាចទប់ស្កាត់ការរួមបញ្ចូលគ្នាដែលមានហានិភ័យជាមួយនឹងការប្ដូរតាមបំណង Guardrails.

នៅក្នុងរយៈពេលខ្លី, Xygeni ធ្វើឱ្យប្រាកដថាសំណួរដែលមានប៉ារ៉ាម៉ែត្រមិនមែនគ្រាន់តែជាការអនុវត្តល្អបំផុតនោះទេ ពួកវាត្រូវបានអនុវត្តក្នុងទ្រង់ទ្រាយធំ។ លែងមានការស្មានទុកជាមុនទៀតហើយ។ គ្មានតម្រងដែលខកខានឡើយ។ គ្រាន់តែជាការការពារពិតប្រាកដប៉ុណ្ណោះ។

ចង់ឃើញពីរបៀបដែល Xygeni រកឃើញសំណួរដែលមិនមានសុវត្ថិភាពនៅក្នុងកូដរបស់អ្នក?

ចាប់ផ្តើមការសាកល្បងឥតគិតថ្លៃ! មិនប្រើកាតឥណទានទេ ភាពមើលឃើញពេញលេញចាប់ពីការស្កេនលើកដំបូងរបស់អ្នក។

ចំណុចសំខាន់ៗ៖ អ្វីដែលត្រូវចងចាំអំពី stripchar និងហានិភ័យនៃការចាក់ថ្នាំ

  • stripchar មិនមែនជាមុខងារសុវត្ថិភាពទេ — វាលុបតួអង្គចេញ មិនមែនហានិភ័យទេ។
  • ការសម្អាត​ធាតុចូល​មិនគ្រប់គ្រាន់ទេ នៅពេលអ្នកកំពុងបង្កើតសំណួរដោយប្រើការភ្ជាប់ខ្សែអក្សរ។
  • សំណួរដែលមានប៉ារ៉ាម៉ែត្រគឺជាការការពារត្រឹមត្រូវហើយភាសា ឬក្របខណ្ឌទំនើបៗទាំងអស់គាំទ្រពួកវា។
  • បន្ទុក​ដែល​មិន​ច្បាស់លាស់​អាច​រអិល​ឆ្លងកាត់​តម្រង​បានជាពិសេសប្រសិនបើល្បិចអ៊ិនកូដត្រូវបានពាក់ព័ន្ធ។
  • ការវិភាគឋិតិវន្ត (SAST) ឧបករណ៍ចាប់យកអ្វីដែលមនុស្សខកខានរួមទាំងលំនាំមិនមានសុវត្ថិភាពដែលលាក់ខ្លួននៅក្នុងកូដចាស់។
  • Xygeni ធ្វើស្វ័យប្រវត្តិកម្មការរកឃើញ ការកំណត់អាទិភាព និងសូម្បីតែការកែតម្រូវ ដូច្នេះក្រុមរបស់អ្នកអាចផ្តោតលើការសរសេរលក្ខណៈពិសេស មិនមែនការដេញតាមចំណុចខ្សោយនោះទេ។

សេចក្តីសន្និដ្ឋាន៖ កុំទុកចិត្តតម្រង។ ធានាសុវត្ថិភាពតាមការរចនា។

ពឹងផ្អែកលើមុខងារដូចជា stripchar អាចមានអារម្មណ៍ថាជាការជួសជុលរហ័ស ប៉ុន្តែវាបង្កើតអារម្មណ៍សុវត្ថិភាពមិនពិត។ អ្នកវាយប្រហារវិវត្តលឿនជាងតម្រងខ្សែអក្សរ។ មធ្យោបាយដែលអាចទុកចិត្តបានតែមួយគត់ដើម្បីបញ្ឈប់ការវាយប្រហារដោយការចាក់បញ្ចូលគឺដោយការសរសេរកូដដែលមានសុវត្ថិភាពតាមការរចនា និងអនុវត្តការរចនានោះគ្រប់ទីកន្លែង។

ឧបករណ៍ដូចជា Xygeni ជួយអ្នកធ្វើដូច្នេះដោយស្វ័យប្រវត្តិ។ pull request ទៅ pipelineពួកវាចាប់អ្វីដែលតម្រងរបស់អ្នកមិនចាប់បាន ហើយជួសជុលវាមុនពេលវាឈានដល់ការផលិត។

ឧបករណ៍វិភាគសមាសភាពកម្មវិធី sca
ផ្តល់អាទិភាព ដោះស្រាយ និងធានាសុវត្ថិភាពហានិភ័យផ្នែកទន់របស់អ្នក
ទទួលបានគណនីឥតគិតថ្លៃរបស់អ្នក។
មិនតម្រូវឱ្យមានកាតឥណទានទេ។

ធានាសុវត្ថិភាពនៃការអភិវឌ្ឍន៍ និងការដឹកជញ្ជូនកម្មវិធីរបស់អ្នក

ជាមួយឈុតផលិតផល Xygeni