Actix Web에 패치를 보내면
개시하다
며칠 전에 Actix Web에 패치를 보냈습니다.말은 그렇지만 사실은 호스트가 아니라 examples에 저장된 todo 응용 프로그램의 이야기입니다.
이 글은 내가 왜 이 패치를 보냈는지, 이 todo 응용 프로그램의 오류를 어떻게 발견했는지 소개하고 싶다.기술적인 이슈는 거의 없다.
어떻게 찾았어요?
나는 웹 애플리케이션을 시도할 때, 그 앱이 믿을 만한지 확인하기 위해, 자주 XSS의 코드를 입력상자에 끼워 넣는다.악의는 없습니다.자위야.엔지니어라면 다들 할 것 같아서요.(응, 안 해, 그래)
그럼에도 불구하고 최근에 템플릿 엔진을 사용하는 것은 당연해졌다. 그렇게 alert가 표시된 일은 거의 없다.그리고 요즘은 XSS를 만드는 게 부끄러울 정도예요.이런 상황에서 며칠 전에 시도한 액티브 웹의 examples/todo는 alert를 완벽하게 보여 준다.
하지만 소스 코드를 봤더라도 Rust의 템플릿 엔진Tera을 잘 사용하겠습니다.최근의 템플릿 엔진이 기본적으로 HTML을 피하지 않는 것이 없을 줄은 몰랐기 때문에 나는'이게 나쁜 것을 찾았나?'라고 생각했다.
무슨 문제가 생겼어요?
테라가 HTML을 어떻게 피하는지 살펴봅시다.테라가 템플릿 엔진에서 평가한 수치는 src/renderer/processor.rs의 evalexpression였다.
if self.should_escape && needs_escape && res.is_string() && !expr.is_marked_safe() {
res = Cow::Owned(
to_value(self.tera.get_escape_fn()(res.as_str().unwrap())).map_err(Error::json)?,
);
}
이것<script>alert(1)</script>
은 should_escape
의 구조기Processor
이다.그리고 이것new
은 should_escape
부터내게 맡기다.autoescape_suffix
의해내다는autoescape_suffix
와.html
이다.오, 점 포함.예, Tera는 파일 형식이 아니라 확장자로 지정됩니다.htm
.확실히 todo 응용 프로그램의 원본에 사용된 템플릿 파일의 확장자는 .xml
이다.기본값
이렇게 되면
autoescape_on
도 반드시 도피 대상이 되어야 한다.수정된 내용
원래 테라는 확장자
.html.tera
의 파일을 사상적으로 처리하기 때문에 확장자.tera
를 도피 대상으로 설정했다.이렇게 해서 드디어 XSS가 없으면 입력할 수 있다.
맞다
테라가 자동으로 대피할 것이라는 의견이 많았고, 지티허브에는 이 파일 이름을 사용한 사람 이 있었다.
조심하세요.그리고 사용
.html
또는 템플릿autoescape_on
을 가르쳐 줍니다.그렇지 않으면
.tera
가 표시됩니다.
Reference
이 문제에 관하여(Actix Web에 패치를 보내면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/mattn/articles/d1662e41311cba9f10cf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)