본문 바로가기

카테고리 없음

1. SQL 인젝션 치트 시트 사용

1. SQL 인젝션 치트 시트 사용 이 특정 팁은 사용 방법에 대한 설명없이 유용한 리소스에 대한 링크 일뿐입니다. 한 번의 특정 공격에 대한 다양한 순열을 연구하는 것이 유용 할 수 있지만, 공격으로부터 보호하는 방법을 배우는 데 시간이 더 좋습니다. 또한 SQL 주입보다 웹 응용 프로그램 보안에 더 많은 것이 있습니다. 예를 들어, XSS (Cross-Site Scripting) 및 CSRF (Cross-Site Request Forgeries)는 최소한 일반적이고 위험합니다.

 

 

필요한 컨텍스트를 제공 할 수 있지만 한 번의 공격에 지나치게 집중하고 싶지 않기 때문에 먼저 한 걸음 물러서겠습니다. 모든 개발자는 좋은 보안 방법을 숙지해야하며 이러한 방법을 염두에두고 앱을 설계해야합니다. 기본 규칙은 다른 곳에서받은 데이터를 절대 신뢰하지 않는 것입니다. 다른 규칙은 다른 곳으로 보내기 전에 데이터를 이스케이프 처리하는 것입니다. 이러한 규칙을 결합하여 필터 입력, 이스케이프 출력 (FIEO)과 같은 기본적인 보안 원칙을 구성 할 수 있습니다. SQL 인젝션의 근본 원인은 출력을 이스케이프하지 않기 때문입니다. 보다 구체적으로, SQL 쿼리 형식과 SQL 쿼리에서 사용하는 데이터 간의 구분이 신중하게 유지되지 않는 경우입니다. 이것은 다음과 같이 쿼리를 구성하는 PHP 앱에서 일반적입니다.

 

코드 1

 

이 경우 $ _GET [‘이름’]의 값은 다른 소스 인 사용자가 제공하지만 필터링되거나 이스케이프되지는 않습니다. 이스케이프는 새로운 컨텍스트에서 데이터를 보존합니다. 이스케이프 출력에 중점을 두는 것은 웹 앱 외부에서 사용 된 데이터를 이스케이프해야한다는 의미입니다. 그렇지 않으면 잘못 해석 될 수 있습니다. 반대로 필터링은 데이터를 사용하기 전에 데이터가 유효한지 확인합니다. 입력 필터링에 중점을 두는 것은 웹 앱 외부에서 생성 된 데이터는 신뢰할 수 없기 때문에 필터링해야한다는 것을 상기시켜줍니다.

 

코드 2

 

이름 지정 규칙을 사용하면 필터링 및 필터링되지 않은 내용과 이스케이프되지 않은 내용을 파악할 수 있지만 준비된 문장을 사용하는 것이 훨씬 더 좋습니다. 운 좋게도 PDO를 사용하여 PHP 개발자는 기본 데이터베이스가없는 경우에도 준비된 명령문을 지원하는 범용 데이터 액세스 API를 보유하고 있습니다. SQL 쿼리의 형식과 SQL 쿼리에서 사용하는 데이터 간의 구분이 신중하게 유지되지 않는 경우 SQL 주입 취약점이 존재합니다. 준비된 명령문을 사용하면 별도의 단계로 쿼리 형식 및 데이터를 제공하여이 책임을 데이터베이스에 적용 할 수 있습니다.

 

코드 3

 

PDO 매뉴얼 페이지는 자세한 정보와 예제를 제공합니다. 준비된 명령문은 SQL 삽입에 대해 가장 강력한 보호 기능을 제공합니다.

 

 

 

 

 

 

 

반응형