문제

쿠키에 XML 직렬화 된 객체를 저장하려고하지만 다음과 같은 오류가 발생합니다.

A potentially dangerous Request.Cookies value was detected from the client (KundeContextCookie="<?xml version="1.0" ...")

양식 입력 필드에 JavaScript 코드처럼 보이는 것을 저장하려고 할 때 비슷한 경우의 문제를 알고 있습니다.

여기서 모범 사례는 무엇입니까? ASP.NET 프레임 워크 에서이 경고를 억압하는 방법 (내가 설명한 양식 문제와 같은)이 있습니까? 직렬화 된 데이터를 쿠키에 저장할 때 일반적인 관행은 무엇입니까?

편집 : 피드백에 감사드립니다. ID보다 쿠키에 더 많은 데이터를 저장하려는 이유는 내가 제어 할 수없는 서비스에서 다시 리핑하는 데 실제로 필요한 객체가 약 2 초가 걸리기 때문입니다. 전체 객체에서 몇 가지 속성을 유지하기 위해 가벼운 물체 'Kundecontext'를 만들었지 만 90%의 시간이 사용됩니다. 이런 식으로 나는 내 페이지의 10%에서 느린 서비스를 호출하면됩니다. ID 만 저장하면 거의 모든 페이지에서 서비스를 호출해야합니다.

모든 문자열과 ints를 별도로 저장할 수는 있지만 객체에는 각 속성에 대해 수동으로 저장하는 것이 지루한 'ContactInformation'및 'addrend'와 같은 다른 경량 객체가 있습니다.

도움이 되었습니까?

해결책

쿠키에 XML에 데이터를 저장하지 않을 것입니다. 우선 쿠키 크기에는 제한이 있습니다 (4K 모두 쿠키를 포함한 헤더). 예를 들어 구분자와 같은 덜 인코딩 전략을 선택하십시오. 구분 된 인코딩은 특히 값을 디코딩하기가 쉽고 빠릅니다.

당신이 보는 오류는 ASP.NET이 헤더가 XSS 공격처럼 보인다고 불평하는 것입니다.

다른 팁

직렬화 된 데이터를 쿠키에 저장하는 것은 매우 나쁜 생각입니다. 사용자는 쿠키 데이터를 완전히 제어 할 수 있으므로이 메커니즘을 사용하여 악의적 인 데이터를 공급하기에는 너무 쉽습니다. 다시 말해: 어느 사막화 코드의 약점은 즉시 악용 될 수 있습니다 (또는 적어도 무언가를 충돌시키는 방법).

대신, 쿠키에서 가장 간단한 식별자를 가능하게 유지하고 형식을 쉽게 검증 할 수있는 유형 (예 : GUID). 그런 다음 직렬화 된 데이터 서버 측 (데이터베이스, XML 파일에 파일 시스템에 XML 파일 등)을 저장하고 해당 식별자를 사용하여 검색하십시오.

편집 : 또한이 시나리오에서는 식별자가 무작위로 무작위로 사용자가 서로의 식별자를 추측 할 수 없게 만들고 단순히 자신의 식별자를 약간 변경하여 서로를 사칭 할 수 있도록합니다. 다시 말하지만, Guids (또는 ASP.NET 세션 식별자)는이 목적을 위해 매우 잘 작동합니다.

질문 소유자의 시나리오 설명 후 두 번째 편집 :이 경우 왜 자신의 쿠키를 사용합니까? 세션 상태 (세션 객체)의 원래 객체 또는 경량 객체에 대한 참조를 유지하면 ASP.NET은 모든 구현 세부 정보를 매우 효율적으로 처리합니다.

살펴보십시오 상태를 봅니다. 아마도 쿠키를 사용하는 대신 viewstate의 포스트 백에서 데이터를 지속하고 싶을 것입니다. 그렇지 않으면 서버에 XML을 저장하고 대신 쿠키의 해당 데이터에 고유 식별자를 저장해야합니다.

당신은 사용을 조사 할 수 있습니다 세션 상태 값을 저장합니다. 쿠키를 사용하여 세션 ID를 저장하도록 구성 할 수 있습니다. 값은 사용자 측에 의해 눈에 띄거나 변할 수 없기 때문에 더 안전합니다.

또 다른 대안은 분산 캐싱 메커니즘을 사용하여 값을 저장하는 것입니다. 내가 가장 좋아하는 것은 memcached.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top