2009-07-03 5 views
1

사용자가 나중에 참조 할 수 있도록 코드 스 니펫을 저장할 수있는 레일스 애플리케이션을 구현 중입니다. 나는 텍스트 입력을 위해 Markdown을 사용할 계획이고 아마도 wmd markdown editor을 사용할 것이다. (하나의 Stackoverflow가 사용합니다.)사용자가 코드 샘플을 입력 할 수있는 가장 위험한 방법은 무엇입니까?

나는 편집 상자에 코드를 입력하는 사람들에 대해 약간 걱정하고 있습니다. 내가 아는 바로는 SQL을 입력하여 DB를 망칠 수 있거나 나중에 실행되어 장난을하는 JavaScript를 입력 할 위험이 있습니다.

일반적으로 레일스는이를 방지 할 수있는 기능이 있지만 사용자가 코드 스 니펫을 입력하도록 권장하기 때문에 여기서 특별한 상황에 처해 있습니까?

주의해야 할 추가 예방 조치가 있습니까?

답변

5

DB 항목 만 삭제하면 문제가되지 않습니다. 레일스는 기본적으로 그렇게합니다. 프레임 워크를 올바르게 사용해야합니다. 더 많은 정보를 위해이 체크 아웃 :

Project.find(:all, :conditions => ["name = ?", params[:name]]) 
# or 
Project.find(:all, :conditions => {:name => params[:name]}) 

NOT THIS : http://wiki.rubyonrails.org/howtos/security/sql_injection

이렇게

Project.find(:all, :conditions => "name = '#{params[:name]}'") 
또한 참고로

<%=h possible_harmful_text %> 

이동하여 XSS 공격을 방지해야

:

크로스 사이트 스크립팅 (XSS)은 일반적으로 다른 사용자가 볼 웹 페이지 에 악의적 인 웹 사용자가 코드 주입을 허용 웹 애플리케이션 에서 발견되는 컴퓨터 보안 취약점 의 유형 이다. 의 이러한 코드에는 클라이언트 측 스크립트가 포함됩니다. 동일한 원본 정책과 같은 액세스 제어를 우회하기 위해 악의적 인 교차 사이트 스크립팅 취약점을 공격자가 사용할 수 있습니다 ( ). 이 종류의 의 취약점은 강력한 피싱 공격 및 브라우저 악용을 시도하기 위해 악용되었습니다. 크로스 사이트 스크립팅은 웹 사이트에 아웃 의 약 80 %이었다 수행 공격에 대한 무단 액세스를 대상이 될 수 있습니다 최종 사용자, 도난에 "모든 벌금을 보이는 '동안 종종 2007 의 모든 문서화 된 보안 취약점 민감한 데이터가 이고 재무가 입니다. (via wikipedia)

물론

SQL 인젝션 애플리케이션의 데이터베이스 계층에서 발생 보안 취약점을 이용하여 코드 주입 기술이다.사용자 입력하거나 잘못 강력하게 형식화되지 않은 SQL 문 또는 사용자 입력에 포함 된 문자열 리터럴 이스케이프 문자 에 대한 을 여과하고 함으로써 예기치 않게 실행될 때 취약점이 존재합니다. 취약점이 더 일반적인 클래스의 인스턴스 인 경우 프로그래밍 또는 스크립팅 언어가 다른 언어에 포함될 때마다 발생할 수 있습니다. SQL 삽입 공격은 SQL 삽입 공격으로 으로 알려져 있습니다. 사용자가 코드의 조각을 입력하도록 권장되기 때문에 1 (via wikipedia)

+0

위키 백과에서 가져 왔습니까? ;) –

+0

예 물론 ^^ 지금 참조를 추가하겠습니다. – marcgg

3

당신은 특별한 상황에서 아니에요. 사람들은 권장하지 않는 분야의 코드 스 니펫을 입력 할 수 있습니다. 기본적으로 항상 "신중해야합니다". 사용자 입력을 신뢰하지 마십시오.

2

코드 코드를 사용하는 대신 샘플을 수락하는 것이 실제로 더 안전한 위치에 있습니다. 그것으로, 예를 들어. Stack Overflow를 사용하면 실제 HTML을 입력하여 내 게시물을 제어 할 수 있습니다.

코드를 평가할 수 있으므로 실제 코드를 허용하는 것은 많게는입니다. 스택 오버플로 예제에서 사이트는 실제로 <a href="http://example.com/">link</a>과 같은 입력 마크 업을 평가합니다. 즉, onclick 처리기 등을주의해야합니다. 철저한 위생 처리는 단순히 이스 케이 핑하는 것보다 훨씬 힘듭니다.

아무 것도 평가하지 않는 한, 텍스트 입력을 허용하는 다른 사이트와 동일한 보트를 타고 있습니다. 표준 데이터 입력 원리에 충실하십시오. 어디서나 쓰기 전에 모든 입력을 즉시 이스케이프하십시오. 그러면 괜찮을 것입니다.

관련 문제