რატომ არ არის JSON. stringify ისეთი უვნებელი, როგორც ჩანს
დეველოპერები ყოველდღიურად იყენებენ JSON. stringify-ს მონაცემების სერიალიზაციისთვის, ობიექტების მავთულის საშუალებით გაგზავნისთვის, ფაილებში მდგომარეობის შესანახად ან კონფიგურაციების შესანარჩუნებლად. თუმცა, JSON. stringify-ის ამ, ერთი შეხედვით, უვნებელ გამოძახებას შეუძლია გამოიწვიოს არასაიმედო დესერიალიზაცია, თუ მონაცემები მოგვიანებით ხელახლა დადასტურდება ვალიდაციის გარეშე.
პრობლემა JSON-ში არ არის. stringify თავად არის, პრობლემა იმაშია, თუ როგორ ვუშვებთ მას არასწორად. როდესაც რთულ ობიექტებს სერიალიზებთ (განსაკუთრებით პროტოტიპების ან კლასის ინსტანციების შემთხვევაში) და მოგვიანებით ბრმად აშორებთ მათ სერიულ ფორმატს. JSON. ანალიზი, თქვენ რისკავთ თქვენს აპლიკაციაში მავნე პროგრამების გააქტიურებას.
JavaScript-ში ადვილია ვივარაუდოთ, რომ სერიალიზებული ინფორმაცია უსაფრთხოა, რადგან ის „უბრალოდ“ JSON„მაგრამ JSON მონაცემებია და არა ლოგიკა. თუ თავდამსხმელები აკონტროლებენ ამ მონაცემებს, მათ შეუძლიათ თქვენს კოდში ნდობის საზღვრების გამოყენება. სწორედ აქ იწყება დაუცველი დესერიალიზაცია.
დეველოპერების გავრცელებული შეცდომები, რომლებიც ხელს უწყობს დაუცველი დესერიალიზაციის განხორციელებას
არასაიმედო დესერიალიზაცია, როგორც წესი, გამომდინარეობს ჩვევებიდან, რომლებიც კოდის მიმოხილვებში უვნებლად გამოიყურება. მაგრამ როდესაც JSON.stringify გამოიყენება დაუდევრად, შეტევის ზედაპირი ფართოვდება.
სახიფათო პრაქტიკა: დაუვალიდებელი მომხმარებლის შეყვანის სერიალიზაცია
⚠️გაფრთხილება: ეს ნიმუში სერიალიზებას უკეთებს თავდამსხმელის მიერ კონტროლირებად შეყვანილ მონაცემებს ყოველგვარი დადასტურების გარეშე. თუ მონაცემები მოგვიანებით სანდო გახდება, ამან შეიძლება გამოიწვიოს არასაიმედო დესერიალიზაცია.
⚠️გაფრთხილება: იგივე მონაცემების დესერიალიზაციამ ვალიდაციის გარეშე შეიძლება ხელახლა შეიტანოს ეს დატვირთვა თქვენს აპლიკაციაში.
სახიფათო ნიმუში: JSON-ის ხელახლა გამოყენება ნდობის საზღვრებს მიღმა
ერთ სერვისში (dev environment) შექმნილი სერიალიზებული JSON ფაილი ხელახლა გამოიყენება მეორეში (prod) ვალიდაციის გარეშე. ეს ხშირად ხდება შიდა ინსტრუმენტებში ან მიკროსერვისებში.
ჩუმი რისკის Python-ის მაგალითი:
⚠️გაფრთხილება: ქვემოთ მოცემული როგორც სერიალიზაციის, ასევე დესერიალიზაციის ეტაპები პოტენციურად არასანდო მონაცემებს ვალიდაციის გარეშე ამუშავებს.
ორივე მაგალითი ახდენს მომხმარებლის მიერ კონტროლირებადი მონაცემების სერიალიზაციას და დესერიალიზაციას სქემის აღსრულების გარეშე. ეს არის არაუსაფრთხო დესერიალიზაციის ექსპლოიტების განვითარების საფუძვლები, რომლებიც გამოწვეულია დაუდევარი JSON-ით. stringify-ის გამოყენება.
რეალური რისკები Pipelines: კოდიდან CI/CD დესერიალიზაციის ნაკადები
ახლა ეს ქცევა ერთგვარად გადაიტანეთ pipeline. როდესაც JSON. stringify არასწორად გამოიყენება CI/CD სამუშაო პროცესების დროს, თქვენ აყენებთ თქვენს შექმნის პროცესს დაუცველი დესერიალიზაციის რისკების წინაშე. ეს ხშირად ხდება არტეფაქტების მეტამონაცემებთან, ტესტირების მოწყობილობებთან და კონფიგურაციის სნეპშოტებთან დაკავშირებით.
საერთო CI/CD ნაკლოვანებები:
- არტეფაქტების დაუცველი გენერირება: აწყობის არტეფაქტები მოიცავს სერიალიზებულ ობიექტებს, რომლებიც ხელახლა გამოიყენება სხვადასხვა დავალებებში ვალიდაციის გარეშე.
- სერიალიზებული გარემოს ცვლადები: გუნდები ინახავს გარემოს ცვლადებს სერიალიზებულ JSON ფორმატში და იყენებენ მათ ეტაპობრივად ან თუნდაც პროექტებში.
- ინექციური ტესტის მონაცემები: არასანდო მონაცემებიდან დესერიალიზებული ტესტის მონაცემები commits ან განშტოებები, რომლებიც შესრულებულია ტიპის შემოწმების გარეშე.
ეს შაბლონები თავდამსხმელებს აადვილებს სანდო მონაცემთა ბაზაში დატვირთვის შეყვანას. pipelineმანიპულირებული JSON stringify ლოგიკის გამოყენებით.
⚠️გაფრთხილება:ეს სამუშაო პროცესი სერიალიზებულ მონაცემებს ვალიდაციის გარეშე გადასცემს. თუ test-runner.js არ ადასტურებს შეყვანის მონაცემებს, არსებობს დაუცველი დესერიალიზაციის რისკი.
If test-runner.js თუ JSON-ს ვალიდაციის გარეშე იტვირთება და აანალიზებს, ამან შეიძლება გამოიწვიოს დაუცველი დესერიალიზაცია.
JSON-ის დაცვა. stringify ვალიდაციისა და უსაფრთხო დამუშავების გამოყენებით
გამოსავალი არ არის JSON-ის თავიდან აცილება. stringify-ის გამოყენება, არამედ მისი სიფრთხილე და უსაფრთხოების შემოწმების თანმიმდევრული ჩატარება. სწორად დამუშავება უსაფრთხოა, მაგრამ თანამედროვე pipelineს, ვარაუდები სწრაფად ირღვევა.
DevSecOps-ის უსაფრთხოების პრაქტიკები JSON.stringify:
- სერიალიზებული და დესერიალიზებული მონაცემების დასადასტურებლად გამოიყენეთ JSON სქემები.
- მკაცრი აკრეფის აღსრულება დააწესეთ, მოერიდეთ იხვისებრ აკრეფას ან ობიექტების ფორმებთან დაკავშირებით ვარაუდებს.
- გამოიყენეთ უსაფრთხო დამუშავების ბიბლიოთეკები, რომლებიც მხარს უჭერენ სქემის აღსრულებას ან ტიპის დამცავ მექანიზმებს.
- სერიალიზებული მონაცემები არასანდოდ მიიჩნიეთ, მაშინაც კი, თუ ისინი სანდო საცავიდან მოდის.
- Instrument pipelines სარისკო JSON.stringify ნიმუშების ადრეულ ეტაპზე დასაჭერად.
საუკეთესო პრაქტიკა: ეს მაგალითი იყენებს JSON სქემის ვალიდაციას სახიფათო დესერიალიზაციის თავიდან ასაცილებლად. მაგალითი იყენებს ajv Node.js-ში:
უსაფრთხო დესერიალიზაცია ნიშნავს ვალიდაციას ადრე სანდო. ნუ დაეყრდნობით JSON-ს. უსაფრთხოებისთვის გამოიყენეთ ნაგულისხმევი პარამეტრები; განსაზღვრეთ, როგორ გამოიყურება სეიფი.
სერიალიზაციის რისკების აღმოჩენა Xygeni-ის გამოყენებით
ხელით აუდიტი მხოლოდ გარკვეულწილად იჭერს თავს. ქსიგენი ხილვადობას განიჭებთ იმის შესახებ, თუ როგორ გამოიყენება JSON.stringify თქვენს კოდის ბაზაში და pipelines.
რას აკეთებს Xygeni:
- კვალი JSON.stringify გამოყენება საწყისი კოდიდან დანერგვამდე.
- აფიქსირებს დაუცველ დესერიალიზაციის ნაკადებს, განსაკუთრებით მიკროსერვისებსა და pipeline ეტაპები.
- ანიშნებს ისეთი სახიფათო მონაცემების სერიალიზაციაზე, როგორიცაა გარემოს ცვლადები, მომხმარებლის შეყვანა ან არტეფაქტები.
- გაფრთხილებები ნიმუშის გადახრების შესახებ, რომლებიც აჩვენებს, როდესაც სერიალიზებული მონაცემები იცვლის ფორმას ან კვეთს სანდოობის საზღვრებს.
ამ ტიპის ხილვადობა კრიტიკულად მნიშვნელოვანია JSON.stringify-ის მიერ შემოტანილ დაუცველი დესერიალიზაციის რისკებთან გამკლავებისას, განსაკუთრებით CI/CD სისტემები, სადაც სერიალიზებული მონაცემები სწრაფად და ჩუმად მოძრაობს.
JSON-ის დაცვა. stringify: თქვენი Shield დაუცველი დესერიალიზაციის წინააღმდეგ
JSON. stringify თავისთავად დაუცველი არ არის. თუმცა, სიფრთხილის გარეშე გამოყენების შემთხვევაში, ის დაუცველი დესერიალიზაციის კარიბჭეს წარმოადგენს.
თუ თქვენ ხართ დეველოპერი და JSON-თან მუშაობთ:
- შეამოწმეთ თქვენი გამოყენება სხვადასხვა სერვისებში, pipelineს, და ხელსაწყოები.
- დესერიალიზებული მონაცემების არასანდოდ მოპყრობა.
- გამოიყენეთ სქემის ვალიდაცია, აღასრულეთ ტიპები და ინტეგრირეთ უსაფრთხოება თქვენს CI/CD.
და ნუ შემოიფარგლებით საუკეთესო პრაქტიკით, გამოიყენეთ Xygeni არასაიმედო დესერიალიზაციის რისკების თვალყურის დევნების, აღმოჩენისა და შეჩერებისთვის, სანამ ისინი წარმოებაში მოხვდებიან. სერიალიზაცია ნეიტრალური არ არის. გამოიყენეთ ის JSON. stringify უსაფრთხო.





