Досліджуючи проблему JSON проти XML , я натрапив на це питання . Тепер однією з причин віддавати перевагу JSON було вказано як простоту перетворення в Javascript, а саме зeval()
. Тепер це одразу видалося мені потенційно проблематичним з точки зору безпеки.
Тож я почав досліджувати аспекти безпеки JSON і в цій публікації в блозі про те, як JSON не такий безпечний, як думають люди . Ця частина стирчала:
Оновлення: Якщо ви робите JSON на 100% належним чином, тоді у вас будуть лише об’єкти на верхньому рівні. Масиви, рядки, числа тощо будуть обернуті. Тоді об’єкт JSON не зможе eval (), оскільки інтерпретатор JavaScript вважатиме, що він дивиться на блок, а не на об’єкт. Це значний шлях до захисту від цих атак, проте все-таки краще захищати свої захищені дані за допомогою непередбачуваних URL-адрес.
Гаразд, отже, це гарне правило для початку: об’єкти JSON на верхньому рівні завжди повинні бути об’єктами, а не масивами, числами та рядками. Для мене це звучить як хороше правило.
Чи потрібно щось робити або уникати, коли справа стосується безпеки, пов’язаної з JSON та AJAX?
В останній частині наведеної вище цитати згадуються непередбачувані URL-адреси. Хтось має більше інформації про це, особливо як ви це робите в PHP? Я набагато досвідченіший у Java, ніж PHP, і в Java це легко (оскільки ви можете зіставити цілий ряд URL-адрес до одного сервлету), тоді як усі PHP, які я робив, зіставили одну URL-адресу з PHP-сценарієм.
Крім того, як саме ви використовуєте непередбачувані URL-адреси для підвищення безпеки?