문제

나를 계속 괴롭히는 간단한 질문.

HTML은 사용자 입력을 즉시 인코딩하고 인코딩 된 내용을 데이터베이스에 저장해야합니까, 아니면 표시시 RAW 값과 HTML 인코딩을 저장해야합니까?

인코딩 된 데이터를 저장하면 개발자가 데이터가 표시 될 때 인코딩하는 것을 잊어 버리는 위험이 크게 줄어 듭니다. 그러나 인코딩 된 데이터를 저장하면 Datamining이 다소 번거롭게 만들어지며 일반적으로 문제가되지 않더라도 약간 더 많은 공간이 필요합니다.

도움이 되었습니까?

해결책

나는 나가는 길에 정보를 인코딩하는 것을 강력하게 제안합니다. 데이터베이스에 원시 데이터를 저장하는 것은 특정 시점에서 보는 방식을 변경하려는 경우 유용합니다. 흐름은 다음과 비슷해야합니다.

sanitize user input -> protect against sql injection -> db -> encode for display

정보를 대신 RSS 피드로 표시하려는 상황에 대해 생각해보십시오. 다시 드라이브를하기 전에 HTML 특정 인코딩을 다시 해야하는 것은 약간 어리석은 것 같습니다. 모든 개발은 입력이 사용자 또는 데이터베이스의 입력 여부에 관계없이 항상 "입력을 신뢰하지 마십시오"밈을 따라야합니다.

다른 팁

인코딩은 디스플레이에서만 수행해야합니다. 예외없이.

산출.

HTML을 사용하면 단순히 문자열의 길이를 확인할 수 없습니다 (& 1 캐릭터이지만 strlen() 5), 당신은 쉽게 자르고 (엔티티를 깨뜨릴 수 있음) 쉽게자를 수 있습니다.

데이터베이스의 문자열을 다른 소스의 문자열과 혼합하거나 다시 읽어야 할 수도 있습니다. 탈출을 놓치고 이중 탈출을 피하지 않고이 응용 프로그램을 수행하는 것은 악몽입니다.

PHP는 비슷한 일을하려고 노력했습니다 magic_quotes 그리고 그것은 큰 실패로 판명되었습니다. 가져 가지 마세요 magic_entities 노선! :)

HTML 인코딩 된 텍스트 (예 :보고 도구)를 이해하지 못하는 것으로 데이터베이스에 액세스해야 할 수도 있습니다. 나는 공간이 문제가되지 않는다는 데 동의하지만 IMHO는 데이터베이스에 HTML 인코딩이 귀하의 관점/프론트 엔드에 대한 지식을 응용 프로그램에서 가장 낮은 계층으로 이동 시킨다는 데 동의하며, 이는 디자인 실수입니다.

이것이 인코딩의 목적을 물리 치지 않습니까? 악성 SQL 스크립트가 입력으로 입력되면 DB로 전달되면 큰 문제가 발생할 수 있습니다.

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