2012-02-28 3 views
1

php와 mysql을 사용하여 웹상의 데이터베이스로 코딩 할 때 데이터베이스에 삽입하기 전에 데이터를 위생 처리해야 누군가가 따옴표를 이스케이프하지 않도록 할 수 있습니다. 안드로이드와 MySQLite에서 필요합니까? 자동으로 위생 처리됩니까? 아니면 그냥 불필요한가요?데이터베이스 살균

+2

FYI, 단어는 sanitize – xbonez

+1

하하, 예, 미안합니다. 단어 위층에 출격하다 :) – bwoogie

+0

ㅎ, 나는 "DROP DATABASE ;" : D –

답변

5

1) 예, 플랫폼에 상관없이 신뢰할 수없는 출처 (사용자, 다른 시스템, 다른 응용 프로그램 등 - 응용 프로그램에 하드 코드되지 않은 항목)에서 오는 모든 입력을 위생해야합니다.

2) 그렇습니다. SQLite 데이터베이스에 액세스 할 때 안드로이드에서이를 수행해야합니다 (직접 또는 컨텐츠 제공자를 통해 가능).

3) SQL 명령에서 데이터베이스에 사용하기 전에 입력 내용을 살균해야하지만 모든 형태의 SQL 주입을 막을 수는 없습니다. 이를 예방하는 최선의 전략은 매개 변수가있는 쿼리를 사용하는 것입니다. 매개 변수가있는 쿼리를 사용하면 데이터베이스의 의미와 명령을 구별 할 수 있으므로 잘못된 입력이 침입하여 SQL 명령이 데이터에 나타나더라도 , 데이터베이스는 데이터를 데이터로 간주합니다. 표준 Java 코딩에서는 PreparedStatements를 사용합니다. SQLite/Android에서는 데이터의 자리 표시 자 (신뢰할 수없는 입력에서 파생 된 것)로 쿼리를 만들고 bindString을 사용하여 해당 자리 표시자를 설정해야합니다 (compileStatement).

우수에 대한 자세한 내용 OWASP SQL Injection 글을 참고하십시오.

+0

데이터를 살균하는 방법을 안내해 주시겠습니까? 답변에 따라 "_In SQLite/Android에서는 데이터에 대한 자리 표시 자 (신뢰할 수없는 입력에서 파생 된 것)로 쿼리를 작성하고 bindString을 사용하여 해당 자리 표시자를 설정해야합니다 ._"콘텐츠 공급자 메소드 delete(), query, update() 등? – Priya

1

인터넷을 비롯한 다른 곳에서도 마찬가지이므로 여기에도 똑같이 적용됩니다.

콘텐츠 공급자에 대한 귀하의 의견을 정말로주의해야합니다. 사람들은 일반적으로 콘텐츠 제공 업체를 작성한 다음 다른 사용자가 자신의 앱과 상호 작용할 수 있도록 허용합니다. 그러나 일반적으로 ContentProvider는 데이터베이스에 대한 인터페이스 역할을합니다. 특히 휴대 전화의 다른 앱에서 앱 콘텐츠 제공 업체에 액세스하도록 허용하는 경우주의해야합니다.

그리고 예, 사용자가 데이터를 입력 할 수있는 곳이면 어디든 조심해야합니다. 여기에는 편집 가능한 텍스트 필드, 인터넷에서 다운로드 한 것, 기본적으로 신뢰할 수없는 것 등이 포함됩니다.

오염 분석 TaintDroid를 수행하는 프로젝트가 있지만 시스템 양식으로 만 존재합니다 (즉 모든 시스템에서 사용할 수없는 런타임 수정을 기반으로 작동). 그러나 현재 어떤 문제가 발생하지 않도록 데이터가 어디로 이동하는지 추적하는 연구 프로젝트가 진행 중입니다. (Scandroid [1] 몇 가지 중 하나의 이름을 지정합니다.)

[1] SCanDroid : 안드로이드 애플리케이션의 자동화 된 보안 인증, www.cs.umd.edu/~avik/papers/scandroidascaa.pdf

관련 문제