HTML은 저장 또는 표시시 사용자 입력을 인코딩합니다
-
03-07-2019 - |
문제
나를 계속 괴롭히는 간단한 질문.
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로 전달되면 큰 문제가 발생할 수 있습니다.