나는 콘텐츠 편집 가능 div와 라이브러리 medium.js를 사용하는 프로젝트에서 작업 중입니다. 하지만 스크립트 삽입을 방지하지 못합니다. 내 div에 어떤 종류의 스크립트 삽입을 방지하는 가장 좋은 방법은 무엇입니까?콘텐츠 편집 가능 div에서 스크립트 주입을 방지하는 가장 좋은 방법
답변
innerHTML
대신 div의 textContent
속성을 업데이트하십시오. 현재 사용자가 div의 콘텐츠를 어떻게 수정하게합니까? 코드를 게시 할 수 있습니까?
편집 된 정보를 서버에 보내서 데이터베이스에 저장하여 나중에 웹 사이트에 저장하고 렌더링한다고 가정합니다. 그리고 사용자가 입력에 특정 HTML 코드를 사용할 수있게하고 싶습니까?
그런 경우, "HTML 살균기"서버 측을 구현해야합니다. PHP에는 HTMLPurifier, 파이썬에는 Bleach, 루비에는 sanitize module이 있습니다. 그것들은 단지 예일뿐입니다. 더 많은 것들이 있습니다. 여러분은 또한 (신중하게!) 자신의 소독제를 쓸 수 있습니다. 새 니타 이저는 문자열을 필터링하여 일반 텍스트 및 HTML 태그 & 속성 만 스크립트 기능없이 데이터베이스에 입력합니다. 최선의 접근 방법에 대한 아이디어는 Wikipedia - HTML Sanitization을 참조하십시오.
콘텐츠를 편집 할 때 자바 스크립트 필터링을 사용하면 충분하지 않습니다. 공격자는 웹 사이트를 분석하여 데이터베이스에 코드를 남겨 두어 서버에 콘텐츠를 게시 할 수 있기 때문에 충분하지 않습니다.
그러나 콘텐츠가 제공 될 때 데이터베이스에 허용하고 위생적으로 표시 할 수 있으므로 표시되지는 않지만 제출할 때 필터링하는 것이 좋습니다. 표시 할 HTML 클라이언트 측을 위생 처리하려면 Google Caja 라이브러리와 같은 것을 사용할 수 있습니다. 이러한 경로를 취하는 경우 다른 프런트 엔드를 구현 한 경우 데이터베이스의 콘텐츠를 살균하십시오.
다른 옵션은 HTML 입력을 모두 비활성화하는 것입니다 (텍스트 만 허용하고 모든 태그를 제거하는 것). 또는 StackExchange 웹 사이트 및 Reddit do와 같은 인기있는 사이트와 같이 인기있는 Markdown 구문을 구현할 수 있습니다. 이전 BBcode 메소드는 PHP에서 항상 옵션으로 제공되며, 여전히 포럼에서 리치 텍스트 입력 메소드로 널리 사용됩니다.
백엔드에서 허용되는 값을 설정하십시오. 임의 입력의 '평가'를 피하십시오. 서버 측에서 무엇을 사용하고 있습니까? – lfender6445
@ lfender6445 : 실제로 프런트 엔드에서 처리해야합니다. Enter를 누르면 스크립트가 실행됩니다. 더 많이 렌더링하는 동안 스크립트가 실행됩니다. 유 사업부에 아무것도 입력을 시작하면, 그 다음