문제

나는 MySQLI에 관한 많은 기사와 질문을 보았고, 모두 SQL 주입로부터 보호한다고 주장합니다. 그러나 그것은 바보 증거입니까, 아니면 여전히 그것을 둘러 볼 수있는 방법이 있습니까? 크로스 사이트 스크립팅 또는 피싱 공격, SQL 주입에 관심이 없습니다.

내가 시작했다고 말한 것은 준비된 진술을 사용하고 있다는 것입니다. 그것이 내가 MySQLI와 의미하는 바입니다. 문자열 연결없이 준비된 진술을 사용하면 완벽합니까?

도움이 되었습니까?

해결책

그러나 그것은 바보 증거입니까, 아니면 여전히 그것을 둘러 볼 수있는 방법이 있습니까?

아니, 당신은 당신이 무엇을하고 있는지 알아야합니다. 바운드 매개 변수 (MySQLI가 제공하는 기능)를 사용하는 경우 주입 유형 공격으로부터 완전히 안전합니다. 이 공격 벡터에서. 그렇다고해서 프로그래머가 문자열을 직접 포함시켜 주입 공격을 가능하게하는 것은 아닙니다. 의도 한대로 기능을 사용해야합니다.

Re : 편집

내가 시작했다고 말한 것은 준비된 진술을 사용하고 있다는 것입니다. 그것이 내가 MySQLI와 의미하는 바입니다. 문자열 연결없이 준비된 진술을 사용하면 완벽합니까?

Foolproof는 여전히 위험한 단어입니다. 그러나 준비된 진술을 통해 묶인 변수에 대한 주사 공격으로부터 안전합니다. 결합 매개 변수가 SQL 쿼리와 별도로 전송되기 때문입니다. "전통적인"임베드 스트링 접근 방식을 사용하면 데이터베이스 서버는 입력을 구문 분석해야하며 그에 많은 에지 케이스가 있습니다 (charsets 등). 데이터와 쿼리가 별도로 전송되면 실제 구문 분석이 진행되지 않습니다 (적어도 변수 데이터를 구문 분석하지 않음).

다른 팁

그것은 기존 MySQL 모듈보다 SQL 주입로부터 더 나은 것을 보호하지 않으며, MySQL_Real_Escape_string을 호출하는 대신 준비된 진술을 사용할 수있는 개발자가 더 쉽게 수행 할 수 있습니다.

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