명명된 매개 변수를 사용하지 않는 SQL Server의 모든 쿼리를 비활성화하시겠습니까?

StackOverflow https://stackoverflow.com/questions/4910449

문제

명명된 매개변수를 사용하지 않는 모든 쿼리를 거부함으로써 SQL 주입의 모든 위협을 완전히 막을 수 있는 것 같습니다.그렇게 하도록 SQL 서버를 구성하는 방법이 있나요?아니면 전체 SQL 파서를 작성하지 않고 각 쿼리를 검사하여 애플리케이션 수준에서 이를 적용할 수 있는 방법이 있습니까?감사해요.

도움이 되었습니까?

해결책

이를 수행하는 방법은 몇 가지뿐입니다.OMG Ponies가 가장 좋은 답변을 제공합니다.데이터베이스에 대해 직접적인 SQL 문을 허용하지 말고 대신 SQL Server가 제공할 수 있는 도구와 보안을 활용하십시오.

다른 방법은 모든 쿼리가 통과해야 하는 추가 계층을 추가하는 것입니다.간단히 말해서 모든 쿼리(SOA 아키텍처)를 SQL Server로 전달할 쿼리를 평가하는 새 앱에 전달합니다.저는 정확히 한 회사가 해당 사이트의 SQL 주입 문제에 대응하여 이 작업을 수행하는 것을 보았습니다.

물론 SQL 주입은 잠재적인 문제 중 하나일 뿐이므로 이는 끔찍한 작업 방법입니다.

SQL 주입 외에도 사이트 자체가 크랙되면 어떤 일이 발생하는지에 대한 문제도 있습니다.웹 서버에 새 페이지를 작성할 수 있게 되면 원하는 쿼리를 연결된 데이터베이스 서버에 전달하는 것이 쉬워집니다.이렇게 하면 배치할 수 있는 모든 코드 수준을 쉽게 우회할 수 있습니다.그리고 공격자는 단지 쓰기만 할 수 있습니다. select * from ... 또는 truncate table ... 도대체 내부 사람은 사이트 자격 증명을 사용하여 SQL Server에 직접 연결하고 원하는 쿼리를 실행할 수 있습니다.

요점은 직접 테이블 액세스를 방지하기 위해 SQL Server에 내장된 보안을 활용하면 서버에 연결을 시도하는 모든 사람이 사용할 수 있는 모든 작업 범위를 저장 프로시저를 통해 제어할 수 있다는 것입니다.

다른 팁

  1. 와 관련된 표에 대해 선택 / 업데이트 / 삽입 / 삭제할 수있는 역할에 대한 보조금 제거
  2. 저장 프로 시저 / 함수 / etc 의 역할에 대한 실행
  3. 를 보호하려는 데이터베이스 사용자에게 역할을 연결합니다.

    액세스 권한을 부여 할 수있는 능력이있는 계정을 멈추지 만 저장된 사용자가 저장된 쿼리를 실행할 수 없도록하는 역할과 관련된 사용자를 중지합니다 (사용자별로 다른 보조금이 없음).절차 / 기능 / 등이 존재합니다.

그리고 어떻게 그걸 확인 하시겠습니까?쿼리는 때로는 쿼리에 쉽게 추가 될 수있는 일정한 값이 있습니다.예를 들어, 나는 다중 언어로 준비된 데이터베이스를 가지고 있지만 모든 코드는 아닙니다. 그래서 내 쿼리는 다음과 같습니다.

SELECT NAME FROM SOMETABLE WHERE ID = :ID AND LANGUAGEID = 1
.

ID는 매개 변수이지만 언어 ID는 아닙니다.이 쿼리를 차단해야합니까?

명명 된 매개 변수를 사용하지 않는 쿼리를 차단하도록 요청합니다.쉽게 집행 할 수 있습니다.그냥 매개 변수를 지정하지 않는 쿼리를 차단하십시오.응용 프로그램 계층 에서이 작업을 수행 할 수 있습니다.그러나 위의 값과 같은 쿼리를 차단하기가 어렵습니다. 여기서 하나의 값은 매개 변수이고 다른 하나는 아닙니다.그 쿼리를 탐지하도록 해당 구문 분석해야하며 열심히 일어날 것입니다.

SQL Server에는이 기능이 내장되어있는 기능이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top