JSON을 소독할 필요가 있습니까?
웹에서 어떤 입력도 믿지 않는 것은 잘 알려진 베스트 프랙티스라고 생각합니다.문장은
"모든 입력은 악하다."
입력 검증에 관해 가장 많이 인용된 인용문일 것입니다.HTML의 경우 DOMPurify 등의 도구를 사용하여 삭제할 수 있습니다.
질문입니다만, JSON을 수신 및 해석하기 위해 Express를 실행하고 있는 Node.js 서버와 Body-parser 미들웨어가 있는 경우, 검사도 실행할 필요가 있습니까?
이것에 대한 나의 (아마도 순진한가?) 생각은 JSON은 데이터일 뿐 코드는 없다.누군가 무효인 JSON을 송신했을 경우, Body-parser(이것이JSON.parse()
(내부)는 어차피 실패하기 때문에 앱이 유효한 JavaScript 객체를 수신할 수 있습니다.내가 그것에 대해 평가나 호출을 하지 않는 한, 난 괜찮을 거야, 안 그래?
내가 뭘 빼놓았나요?
부터JSON.parse()
해석할 데이터에서 코드를 실행하지 않습니다.이 방법은 취약하지 않습니다.eval()
단, 서버 및 애플리케이션의 무결성을 보호하기 위해 다음과 같은 작업을 수행해야 합니다.
- 적절한 위치에 예외 핸들러를 적용합니다.
JSON.parse()
예외가 발생할 수 있습니다. - 어떤 데이터가 있는지 추측하지 말고 데이터를 사용하기 전에 명시적으로 테스트해야 합니다.
- 특별히 찾고 있는 프로세스 속성만 사용하십시오(JSON에 있을 수 있는 다른 정보는 피하십시오).
- 모든 착신 데이터가 합법적이고 허용 가능한 값인지 확인합니다.
- 데이터 길이를 삭제합니다(과도한 대용량 데이터로 인한 DOS 문제를 방지하기 위해).
- 이 착신 데이터를 페이지의 HTML에 직접 삽입하거나 SQL 문에 직접 주입하는 등 추가 평가를 할 수 있는 장소에 두지 마십시오.이는 해당 환경에서 안전한지 확인하기 위해서입니다.
따라서 질문에 "예"라고 직접 대답하려면 먼저 데이터를 처리하기 위한 완벽한 최전방이지만 바디 파서를 사용하는 것 말고도 더 많은 작업을 수행해야 합니다.바디파서에서 데이터를 가져온 후 수행하는 다음 단계는 많은 경우 중요하므로 각별한 주의가 필요할 수 있습니다.
예를 들어, 이러한 검사 중 일부를 적용하는 속성을 가진 개체를 예상하여 예상한 속성만 포함하는 필터링된 결과를 제공하는 구문 분석 함수가 있습니다.
// pass expected list of properties and optional maxLen
// returns obj or null
function safeJSONParse(str, propArray, maxLen) {
var parsedObj, safeObj = {};
try {
if (maxLen && str.length > maxLen) {
return null;
} else {
parsedObj = JSON.parse(str);
if (typeof parsedObj !== "object" || Array.isArray(parsedObj)) {
safeObj = parseObj;
} else {
// copy only expected properties to the safeObj
propArray.forEach(function(prop) {
if (parsedObj.hasOwnProperty(prop)) {
safeObj[prop] = parseObj[prop];
}
});
}
return safeObj;
}
} catch(e) {
return null;
}
}
괜찮을 거예요.의 초기 는 종종 JSON에 전화를 .eval()
물론 큰 보안 구멍인 수신 스트링에 접속되어 있습니다. ★★★★★★★★★★★★★★★★★.JSON.parse
에서는 이러한 종류의 건전성 체크의 대부분을 처리합니다.
예를 들어 수신된 JSON 개체에서 무언가를 꺼내 SQL 쿼리에 직접 전달하지 않는 한 문제 없습니다.
언급URL : https://stackoverflow.com/questions/25983090/is-sanitizing-json-necessary
'it-source' 카테고리의 다른 글
커스텀 포스트 wp_pagnation (0) | 2023.02.22 |
---|---|
iis7의 워드프레스 URL에서 index.php를 제거합니다. (0) | 2023.02.22 |
헤더에서 워드프레스 피드 URL을 삭제/제거하는 방법 (0) | 2023.02.22 |
속편 - 데이터베이스 결과의 JSON 개체만 반환하려면 어떻게 해야 합니까? (0) | 2023.02.22 |
Safari를 통해 허가된 HTTPS 요청이 작동하지 않음 (0) | 2023.02.22 |