2013-05-07 4 views
0

나는 질문을 한 번도 한 번도 물어 본 적이 없다. 왜냐하면 필자가 여기 또는 닉 크래프트에서 항상 필요한 것을 찾는 경향이 있기 때문이다.사용자가 제출 한 mysql 질의 처리 방법

내 조직의 기술 담당자 만 사용하는 응용 프로그램에 관한 약간의 지침이 필요했습니다. 데이터베이스를 쿼리 할 수 ​​있어야하지만 정보의 민감한 특성 때문에 데이터 덤프를 내보낼 수 없기를 원합니다. 조심해야 할 다른 위험이 있지만 이러한 위험이 무엇인지 모릅니다. 내가 생각할 수있는 유일한 sanitizing은 SQL 구문 문제를 확인하고 데이터 덤프를 생성하는 모든 종류의 명령문을 방지하는 것입니다.

스크립트는 외부 라이브러리없이 PHP로 작성됩니다. 데이터베이스 사용 권한은 SELECT로 제한되므로 업데이트, 삽입, 삭제 등은 없습니다 ... 사용자가 처음부터 끝까지 전체 SQL 쿼리를 입력하기 때문에 PDO 준비 문을 사용할 수 없습니다.

어떤 생각을해도 대단히 감사하겠습니다.

+0

내가 repotico 또는 도구와 같은 내 관리자가 필요하다고 생각해 ... :) 당신은 새로운 응용 프로그램을 다시 작성하지 않아도됩니다 –

+0

정확히 데이터 덤프를 내보내는 것을 의미합니까? 'SELECT ... INTO OUTFILE ... '? – Gumbo

+0

팁 아룬 주셔서 감사합니다. 예 SELECT ... INTO OUTFILE 또는 유사한 출력을 리턴 할 수있는 조회. –

답변

0

당신은 사용자가 단지 SELECT에 전체 쿼리를 입력 할 수 있도록하는 경우,하지 않습니다. 이것은 보안상의 악몽이 될 것입니다.

대신 PDO는 고급 검색을 준비하고 허용합니다. 그렇지 않으면 인공 지능의 위생 수준이 필요하며, 그렇게한다면이 질문을하지 않을 것입니다.

대신 레코드 검색에 필요한 논리를 스스로에게 물어보십시오. 여러 필드를 검색해야합니까? 조인이 필요하면 레코드를 가져올 때 암시 적으로 (그리고 자동으로) 테이블을 함께 결합 할 수 있습니다.
또한 형태로 LIMIT, 페이지 매김, 사물 의 모든 방식에 대한 매개 변수를 사용할 수 있습니다


기본 점은 이것이다 : 사용자가 SQL 쿼리를 작성할 수 있습니다 경우, 당신은뿐만 아니라 수도 그 (것)들에게 당신의 SQL 장치에 로그인을주고 소독을 모두 무시하십시오. 사용자가 자신의 쿼리를 작성하고있을 때 입력을 살균하는 것은 이상한 일이며 쿼리가 실행되지 않을 수도 있습니다.

+1

다른 팀들로부터 더 명확한 설명을 한 후에는 데이터 덤프 만 보호해야한다는 것을 분명히 알 수 있습니다. 데이터 덤프는 FILE 권한으로 MySQL을 통해 처리 할 수 ​​있다고 생각합니다. 모든 도움에 감사드립니다. –

0

쿼리가 사용자 제공 데이터로 사용할 필드를 제한하고 먼저 mysqli_real_escape_string을 통해 실행할 수 있습니다.

여기서는 검색하려는 필드가있는 양식 만 노출하고 전체 쿼리를 입력 할 수있는 것은 아닌 것으로 가정합니다.

HTH