2014-09-11 5 views
0

나는 mySQL 데이터베이스를 사용하는 웹 사이트를 가지고 있으며 사용자 추가, 일반 정보 수정 등과 같은 일반적인 작업을하고 싶습니다. 정규 쿼리로 완벽하게 처리 할 수 ​​있습니다. Im 준비된 진술을 사용하여 보안을 향상시킵니다. 저장 프로 시저를 사용하여 보안을 증가시켜야합니까? 그렇지 않으면 결과가 동일해야합니까? 저장 프로 시저를 사용할 수도 있지만 공격자가 실제 쿼리에 대해 가질 수있는 직접적인 상호 작용을 제한 할 수 있습니다. 내가 틀렸다?mySQL : 저장 프로 시저가 쿼리보다 안전합니까?

+0

mysqli 태그를 제거했다. 특정 API는이 질문과 관련이 없습니다. – Barmar

답변

0

나는 그것이 당신이 사용하는 언어에 달려 있다고 생각합니다. 실행될 모든 sql을 포함하는 sql 문자열로 준비된 문을 사용하거나 저장 프로 시저를 실행하는 sql 문자열로 준비된 문을 사용하면 대부분의 언어에서 거의 동일합니다. 은 준비된 선언문 주변의 보안을 처리해야합니다. 예를 들어 C#은 입력의 유효성을 검사하므로 준비된 명령문이 잘못 작성되지 않으면 나쁜 (하지만 예상 값, 즉 1 대 0) 변수가 결과 집합을 크게 변경하지 않는 한 SQL 주입 취약점이 크게 감소합니다. 다른 언어는 동일한 수준의 유효성 검사를 제공하지 않을 수 있습니다. 따라서 저장된 proc이 어떻게 생겼는지에 따라 이점이있을 수 있습니다.

저장 프로 시저를 사용하면 유지 관리가 더 쉬울 수 있지만 프로그램이 제대로 시작되도록 설계된 경우 보안 수준이 변경 될 수있는 시나리오는 많지 않습니다. 내가 생각할 수있는 유일한 예는 사용자 입력에서 원시 SQL 문자열을 가져 와서 db에 대해 해당 SQL을 실행하는 저장 프로 시저입니다. 당신이 받아 들일 수있는 입력의 유효성을 검증하기 위해 많은 노력을 기울이지 않는 한, 준비된 명령문을 사용하는 것보다 실제로 안전성이 떨어집니다.이 경우, 처음에는 그러한 저장된 proc를 사용하는 것이 더 좋은 이유가 있습니다.

기본적으로 내가 말한 것은 준비된 문장에 대한 사용자의 언어 문서를 읽고 준비된 문장을 사용하여 어떤 취약점이 있는지 SQL 쿼리를 직접 실행하는 대신 저장 프로 시저를 호출하는 준비된 명령문으로 전환하여 특정 시나리오에서 제거 할 수 있습니다.

0

결과는 동일합니다 (저장 프로 시저를 오른쪽으로 설정했다고 가정).

꽤 좋은 글이 올라 오는 것처럼 보입니다. here. 나는 사용자 입력을 직접 피하려고 제안하지는 않겠지 만. (그들은 이것을 옵션 3으로 언급한다)

관련 문제