사용자 입력을 제대로 처리하지 못하는 일부 레거시 코드를 업데이트하려고합니다. 코드는 최소한의 위생 처리를 수행하지만 알려진 모든 위협을 다루지는 않습니다.입력 된 새 니타 이징 및 매개 변수화 된 쿼리는 상호 배타적입니까?
새 코드는 매개 변수가있는 쿼리를 사용합니다. 내가 이해 하듯이, 쿼리는 미리 컴파일되고 입력은 단순히 실행될 수없는 데이터로 취급됩니다. 이 경우 위생 처리가 필요하지 않습니다. 그게 맞습니까?
다른 말로하면,이 레거시 코드에서 쿼리를 매개 변수화하면 현재 수행중인 위생 처리를 제거해도 괜찮습니까? 아니면 매개 변수화에 더하여 위생 처리의 추가 이점을 놓치고 있습니까?
그 $ columnname과 $ ASC_OR_DESC가 사용자에게서 오지 않았 으면합니다. 이것들은 코드에서 하드 상수 여야하며 상수에서 변수, SQL에 이르기까지 데이터 경로에 대한 전체 감사를 수행하여 변수 중 하나인지 확인해야합니다. (경로가 매우 짧은 경우 더 쉽기 때문에 매우 낮은 수준의 매개 변수 일 뿐이며 즉각적으로 높은 수준에서 SQL 코드로 끝나는 매개 변수가없는 다른 함수 호출이어야 함) – Javier
@Javier : 그렇지 않습니다. 사용자가 열 머리글을 클릭하여 해당 열을 기준으로 정렬 할 수 있도록하는 일반적인 UI 기능은 무엇입니까? 그러나 네, 당신은 UI 입력이 화이트리스트 또는 어떤 종류의지도를 사용하여 열 이름과 일치하는지 확인하고 싶을 것입니다. UI의 값은 열의 리터럴 이름 일 필요는 없으며 코드가 유효한 열 이름 목록의 항목에 연결할 수있는 값이 될 수 있습니다. –