2012-04-13 1 views
4

현재 온라인 모바일 환경에서 사용하기 위해 mysql 데이터베이스의 xml 내보내기를 websql 데이터베이스로 가져오고 있습니다.WebSQL 데이터베이스에서 SQL 주입을 방지 하시겠습니까? (데이터 인용 부호 처리 방법)

내가 삽입 할 문자열에 큰 따옴표가 올 때까지 모든 것이 잘 작동합니다. 일반적으로, PHP에서 나는 다음과 같이 사용할 것입니다 : 삽입하는 동안 mysql_real_escape_string.

옵션 제가 시도 할 수있는 것은 정규 표현식을 작성하고 슬래시를 추가/제거하는 기능을 만드는 것입니다. 이것에 대한 구글 예제가 많이 있습니다 -하지만 다른 사람이이 발생했습니다 가능성이 더 나은 솔루션을 볼 경우 찾고 있어요.

도움 주셔서 감사합니다.

+0

'string.replace ("\" ","\\\ "")'''를'\ "로 대체합니다. 좀 이상하게 보입니다. 이스케이프 문자도 이스케이프 처리해야하기 때문입니다. P – Halcyon

+0

실제로 작동하지만 ... 공백도 변환하지만 그 외는 단단한 솔루션처럼 보입니다. 나는 이것을 생각해 보았다고 생각한다. 하하. 답변으로 게시하고 올바르게 표시하겠습니다! (이스케이프 대답) – Roi

+1

주요 문제는 SQL 주입입니다. 우발적이거나 그렇지 않은 경우. 좋은 답변을 찾으시기 바랍니다. * 최선의 해결책은 지원되는 경우 자리 표시 자 *를 사용하는 것입니다. –

답변

0

간단한 해결 방법은 AJAX 요청을 사용하여 PHP에 XML 문자열을 보내면 이스케이프 된 따옴표가있는 문자열이 반환됩니다.

+2

각 쿼리와 동등한 서버를 형성 할 때 클라이언트에서 임의의 원격 서버로 라운드 트립합니다. 클라이언트의 수를 곱한로드? 너 진심이야? –

+0

이 질문은 시나리오를 명확히하지 않았기 때문에 다른 가정이있었습니다. 나는 localhost (127.0.0.1)에서 서버 측으로 이동하여 한 번 큰 XML 파일을 만들지 않는다고 가정했다. Wordpress에서 성공적으로 내보내기와 같은 작업을 수행했습니다. –

6

탈출을 잊어 버리십시오. 옳은 일을하십시오 : 자리 표시자를 사용하십시오. 이 경우 데이터는 원시 데이터 문자열로 처리되지 않습니다. Web SQL에서는 executeSql으로이 작업을 수행 할 수 있습니다. 이 방법에 대한 설명은 pre-processing section을 참조하십시오. 직선 문서의 소개에서

예 : 아무리 id 변수에 어떤

db.readTransaction(function (t) { 
    t.executeSql('SELECT title, author FROM docs WHERE id=?', [id], function (t, data) { 
    report(data.rows[0].title, data.rows[0].author); 
    }); 
}); 

,이 요청은 결코 명령의 일부로 해석되고 그대로 값을 찾을 것이다.

+1

사양을 기반으로 솔루션을 제공해 주셔서 감사합니다. 내 솔루션은 해킹입니다. –

+0

INSERT INTO tablename (colnames) VALUES (?,?,? ...)를 사용하여 수행 할 수 있습니까? – Alon

+0

@Alon 물론. –