Вы также можете использовать, eval()
но JSON.parse()
это более безопасный и простой способ, так почему бы вам?
хорошо и работает
var yourJsonObject = JSON.parse(json_as_text);
Я не вижу причин, почему вы предпочитаете использовать eval
. Это только подвергает вашу заявку риску.
Тем не менее - это является также возможно.
плохо - но тоже работает
var yourJsonObject = eval(json_as_text);
Почему eval
плохая идея?
Рассмотрим следующий пример.
Некоторые сторонние или пользовательские данные предоставили строковые данные JSON.
var json = `
[{
"adjacencies": [
{
"nodeTo": function(){
return "delete server files - you have been hacked!";
}(),
"nodeFrom": "graphnode1",
"data": {
"$color": "#557EAA"
}
}
],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode1",
"name": "graphnode1"
},{
"adjacencies": [],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode2",
"name": "graphnode2"
}]
`;
Ваш серверный скрипт обрабатывает эти данные.
Использование JSON.parse
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = JSON.parse(json)[0].adjacencies[0].nodeTo;
}
скину
Uncaught SyntaxError: Unexpected token u in JSON at position X.
Функция не будет выполнена.
Ты в безопасности.
Использование eval()
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = eval(json)[0].adjacencies[0].nodeTo;
}
выполнит функцию и вернет текст.
Если я заменю эту безвредную функцию на функцию, которая удаляет файлы из папки вашего сайта, вы были взломаны. В этом примере не будут выдаваться ошибки / предупреждения.
Вы НЕ в безопасности.
Мне удалось манипулировать текстовой строкой JSON, чтобы она действовала как функция, которая будет выполняться на сервере.
eval(JSON)[0].adjacencies[0].nodeTo
ожидает обработки строки JSON, но в действительности мы только что выполнили функцию на нашем сервере.
Этого также можно избежать, если мы проверяем все данные, предоставленные пользователем, перед передачей их eval()
функции на стороне сервера, но почему бы просто не использовать встроенный инструмент для анализа JSON и избежать всех этих проблем и опасностей?