이 SQL 주입 문제에 대한 약간의 도움이 필요합니다.매개 변수가있는 프로 시저로 SQL 주입
다음은 매개 변수화 된 저장 프로 시저의 버전입니다. @v_string이 동적 SQL로 취급되지 않도록하려면 어플리에서 호출하는 방법을 제외하고 있습니까?
저는 이것이 상당히 단단하다고 생각합니다. 실행되거나 연결된 SQL이 없지만 세미콜론을 삽입해도 추가 데이터가 반환 될 수 있습니다.
나는이 질문을 고려하기 위해 여러 단계를 알고 있지만 주입 질문의 대다수가 동적 쿼리와 관련되어 있기 때문에 누락 된 몇 가지 간단한 해결책이 있는지 알고 싶습니다.
create table dbo.Employee (EmpID int,EmpName varchar(60))
declare
@v_id int,
@v_string varchar(60)
begin
set @v_string='test'''; waitfor delay '0:0:5' --
if @v_id is null
begin
set @v_id = (select EmpID
from Abc.Employee
where [email protected]_string);
end
print @v_id
end
SP가 사용자가 직접 제공 한 쿼리의 매개 변수를 사용하고 select 문에 직접 연결되어있는 경우에만 문제가 발생할 수 있습니다 (매개 변수). –
"세미콜론을 삽입하면 추가 데이터가 반환 될 수 있습니다." 그 일이 어떻게 일어날 지 모르겠습니다. 이 세미콜론을 삽입하는 위치와 그로 인해 추가 데이터가 반환된다는 것을 어떻게 알 수 있습니까? –
select * with sys.databases –