2014-07-05 2 views
0

기본적으로 웹 응용 프로그램을 만들고 있는데 보안 기능을 통해 가능한 한 강력한 응용 프로그램을 만들려고합니다.PHP에서 세션 변수를 기반으로 SQL 인젝션을 수행 할 수 있습니까?

내 앱에 로그인하면 세션 변수를 기반으로 해당 사용자를 추적합니다.

SQL을 수행 할 때 사용자 세션 변수를 사용하여 예를 들어 누구인지 확인합니다.

$name = $_SESSION['user_name']; 

예제 쿼리는 다음과 같이 될 것이다 .. 읽기에서

$query1 = "SELECT * FROM tableName WHERE userName = '$name'"; 

온라인 사이트 내가 같은 것들을 사용하지 않아야 말한다 "SQL 문에서 사용자 입력을." 세션 변수를 사용하기 때문에 사용자가 SQL 문에 직접 액세스 할 수 없거나 세션 변수가 여전히 "사용자 입력"이라고 생각하는 것이 맞습니까?

난 그냥 같은 일반적인 SQL 주입 방지 방법을 통해 가야하지 않으면

...

  • 입력 유효성 확인 사용자를 만드는 사용자 권한을 확인
  • (길이에 따라 데이터를 구문 등 인증) 최소 특권을가집니다. 사람이 만드는 어떤 의견에 미리
  • 요법 ..

감사합니다.

+0

[세션 중독] (http://en.wikipedia.org/wiki/Session_poisoning). – raina77ow

답변

2

데이터가 어디에서 왔는지는 중요하지 않습니다. 어떤 경우에도 데이터가 의도 한대로 해석되어야합니다.

그리고 매개 변수 값을 SQL로 잘못 해석 할 수 없도록 SQL 코드와 매개 변수 값을 별도로 전달하는 매개 변수가있는 명령문을 사용하는 가장 쉬운 방법 중 하나입니다.

준비된 문은이 매개 변수화 인 either native or emulated을 구현합니다. 사용자가 입력 한 값에 영향을 줄 수 있는지 여부는 걱정할 필요가 없습니다.

-1

맞죠 내가 세션 변수를 사용하고 있기 때문에 사용자가

올바른 SQL 문에 직접 액세스 할 수없는 생각이다. $ _SESSION-vars는 서버 파일 시스템에 저장되며 사용자 입력 ($ _GET & $ _POST 등)을 사용자에게 입력하지 않으면 실제 처리 방법이 없습니다. 실제 사용자 데이터없이 $ _SESSION [ 'user_name']을 생성하면 잘 처리됩니다. 어려운 부분은 입력을 파싱하지 않고 사용자 이름을 얻는 것입니다. 이러한 종류의 작업에 HTTP 데이터 필터링 프레임 워크를 사용하는 것이 좋습니다.

+0

페이지에서 사용자 이름을 얻는 방법은 $ _POST와 같은 작업을 수행 할 때 세션 변수를 작성하는 것입니다. 세션 변수에서 사용자 ID를 얻는 것이 안전합니까? –

+0

잘 .. 그게 - 어떻게 사용자 ID를 생성합니까? – specializt

+0

죄송합니다. 로그인 할 때 사용자 이름을 알았 기 때문에 사용자 이름이 유효한지 확인한 다음 $ _SESSION [ 'user_name']에 넣고 해당 변수가 로그온하는 동안 모든 페이지에 걸쳐 전달됩니다 –

1

항상 이스케이프 입력. 그들의 이름이 "David O'Connor"또는 무엇인가라면?

이 이름은 사용자가 제공 한 것으로 추정되므로 잘 수행하십시오.

어쨌든 직접 SQL 쿼리를 발행해서는 안되며, 함수는 사용자 (또는 ORM)를 위해 함수를 작성해야합니다.

+0

감사합니다. 이것도 살펴 보겠습니다. –

0

저는 세션 변수를 사용하기 때문에 사용자가 SQL 문에 직접 액세스 할 수 없거나 세션 변수가 여전히 "사용자 입력"이라고 생각합니까?

예를 들어 문제는 사용자 이름이 사용자가 뭔가 컨트롤러 일 수 있습니다. 애플리케이션 요구 사항에 따라 애플리케이션을 변경하거나 선택할 수 있습니다.

나는 놀라움을 막는 가장 간단한 방법은 너무 많은 생각을 멈추고 그냥 쿼리를 보호한다고 생각합니다.

저는 PHP에 대한 전문 지식이 없지만이 보안 문제를 해결하는 데 도움이 될 진술을 준비했다고 생각합니다. 그냥 사용하십시오. (준비된 문장, 그냥 사용하십시오.) :

+0

예 내가 생각하기로 할거야 : –

+0

PHP에 관한 정보를 조금만 검색하면 찾은 것입니다. http://php.net/manual/en/pdostatement.bindparam.php –

+0

이렇게하면 좋을 것 같습니다. 이것을 구현하십시오! :) –

0

데이터베이스에 userName 열을 작성하고 $ _SESSION [ '을 (를) 작성하기 전에 입력/사용자 작성 페이지를 입력해야 유효합니다. 사용자 이름'].

그런 다음 $ _SESSION 변수가 안전합니다. 프로세스의 어딘가에 유효성 검사를 수행해야합니다.

Input -> store in database/session -> use 

첫 번째 화살표에서 권장합니다. 그런 다음 질문에 작성한 코드 스 니펫은 완벽합니다.

관련 문제