2010-06-29 4 views
0

우리는 처음으로 iPhone 게임을 만들고 있으며 사용자가 높은 점수를 얻은 경우 앱에 높은 점수 데이터베이스에 저장하기 위해 이름을 입력해야합니다.SQLite 및 iPhone 입력 Sanitisation

내가 궁금해 한 것은 iPhone에서 입력 내용을 살균하는 방법입니다. 분명히 우리는 그들의 이름을 입력 할 때 테이블을 떨어 뜨리는 것을 원하지 않습니다!

아무도 조언이나 올바른 방향으로 밀고 할 수 있습니까?

감사합니다, Dwaine

최소한
+0

SQLite를 직접 사용하고 있습니까? 아니면 SQL 데이터 저장소에 코어 데이터를 사용하고 있습니까? – TechZen

+0

저는 SQLite를 직접 사용하고 있습니다 ... 저는 터미널에 SQLite 데이터베이스를 생성하고 프로젝트에 추가 한 다음 sqlite3을 호출합니다. static char * sql = "INSERT INTO scores (hsName , hsScore) VALUES (?,?) "; sqlite3_prepare_v2 (appDelegate.database, sql, -1, & writeScoresStmt, NULL); 그런 다음 sqlite3_bind_text 및 sqlite3_bind_int를 사용하여 값을 바인딩하십시오. –

답변

1

, 당신은 매개 변수화 된 쿼리를 사용한다. 예를 들어

:

sqlite3_reset(insertStatement); 

sqlite3_bind_text(insertStatement, 1, [userInput UTF8String], -1, SQLITE_TRANSIENT); 

if(SQLITE_DONE != sqlite3_step(insertStatement)) 
{ 
    //handle error 

//etc... 

또한 코어 데이터를 사용하여 구현 세부 사항을 처리하기에 의존 할 수있다. 그게 내 추천 일거야.

+0

안녕하세요, 안녕하세요. 나는 사람들이 내 이름을 입력 할 때 내 테이블을 삭제하거나 데이터베이스를 삭제하려고하는 것에 대해 걱정하고 있습니다. 아니면이 문제가 발생합니까? –

+1

예, SQL 주입 공격은 메모리에 쿼리 문자열을 작성한다고 가정합니다. 문자열 데이터를 사용하는 매개 변수화 된 쿼리는 문자열 데이터 만 허용하고 입력을 문자열로 처리합니다. 즉,'SELECT * FROM users WHERE name = 'a'; DROP TABLE users;'SELECT * FROM users WHERE name = " 'a'; DROP로 데이터베이스에 보내질 것입니다. TABLE 사용자; ". – Don