programing

각.json과 $scope의 차이.$eval을 JSON 문자열에 적용할 경우

minimums 2023. 10. 30. 20:50
반응형

각.json과 $scope의 차이.$eval을 JSON 문자열에 적용할 경우

angularjs 앱에서는 주로 JSON 문자열을 파싱합니다.angular.fromJson, 다음과 같습니다.

var myObject=angular.fromJSON(jsonString);

하지만 사용하면 같은 결과를 얻을 수 있을 것 같습니다.$scope.$eval:

var myObject=$scope.$eval(jsonString);

이 바이올린 보기

또는 바닐라 자바스크립트를 사용하여 다음과 같이 할 수 있습니다.

var myObject=JSON.parse(jsonString);
  • 사용해야 할 특별한 이유가 있습니까?angular.fromJSON보다는JSON.parse?

  • 사용할 때 발생할 수 있는 문제가 있습니까?$scope.$evalJSON 문자열 파싱?

소스 코드를 확인합니다.

function fromJson(json) {
  return isString(json)
      ? JSON.parse(json)
      : json;
}

그들은 그냥 지나쳐 가는 중입니다.JSON.parse.

$evaluate에 관해서는 $parse에 해당합니다.

  // $scope.$eval source:
  $eval: function(expr, locals) {
    return $parse(expr)(this, locals);
  },

$parse 소스는 게시하기에 너무 길지만 인라인(스트링된) 개체를 실제 개체로 변환할 수 있으므로 이 경우 실제로 JSON도 변환할 수 있습니다.

(나는 방금 $parse 소스를 읽기 전까지 이것을 몰랐습니다.)

JSON.parse가 아닌 JSON에서 angular.parse를 사용하는 특별한 이유가 있습니까?

아니요, 그렇지 않습니다.JSON 문자열을 이중 구문 분석하지 않도록 확인해 주지만 다음과 같습니다.

var jsonString = '{"foo":"bar"}';
var json = JSON.parse(jsonString); // Parsing once is good :)
JSON.parse(json); // Parsing twice is bad :(

$scope을 사용할 때 발생할 수 있는 문제가 있습니까?$eval이 JSON 문자열을 구문 분석합니까?

당신이 필요 이상의 일을 하고 있다는 것 말고는 전혀 그렇게 생각하지 않습니다.따라서 JSON이 있다는 것을 알고 있다면 더 무거운 $parse 기능을 사용할 이유가 없습니다.

위의 답변은 거의 정확합니다.그러나 를 사용하는 데 잠재적인 문제가 있습니다.$scope.$eval()JSON 문자열을 구문 분석합니다. JSON 문자열은 둘 중 하나와 함께 존재하지 않습니다.JSON.parse()아니면angular.fromJson(): 담보의Angular는 함수 호출, 조건을 포함한 복잡한 자바스크립트를 포함하는 표현을 허용합니다.?:, 가변 과제 등등.이 모든 것은 다음을 사용할 경우 인식되고 처리됩니다.$scope.$eval(), 악의적인 최종 사용자에 의해 추가되었다고 해도 말입니다.

JSON은 더 복잡한 자바스크립트 기능을 지원하지 않으며, 잠재적으로 "위험한" 기능도 지원하지 않습니다.만약 당신이 진정한 JSON 파서를 사용한다면,JSON.parse()아니면angular.fromJson(), 악성코드가 주입되고 실행될 가능성은 없습니다.

Angular 식들이 분리되어 전류에서만 평가되기 때문에$scope, 코드 주입의 위험이 다소 완화됨 -$scope.$eval()자바스크립트의 네이티브보다 훨씬 덜 위험합니다.eval()JSON 파싱에 사용할 수 있습니다.그러나 잠재적인 보안 위험이 있고 적절한 JSON 파서를 사용하는 것이 더 빠를 수 있기 때문에 이 목적을 위해 두 가지 기능을 사용할 이유는 여전히 없습니다.

언급URL : https://stackoverflow.com/questions/29243854/difference-between-angular-fromjson-and-scope-eval-when-applied-to-json-string

반응형