2013-12-08 2 views
7

저는 몇 가지 변수를 저장하는 퀴즈 사이트를 만들고 있는데, (답변 시간, 사용자가 선택한 응답 옵션 등)은 각 질문 이후에 $_SESSION에 있습니다. 그 통계를 DB에만 저장합니다. 사용자가 퀴즈를 마친 후에

if을 구현하여 변수가 숫자 (is_numeric())인지 확인하십시오. 또한 길이 (strlen()) 등을 확인합니다.

  • 하지만 이유가 있습니까?
  • 을 MySQL에 저장하기 전에 real_escape_string()을 저장하는 것으로 충분합니까?
  • 또한 많은 사용자가 있다면 서버에 큰 부하가 걸리지 않습니까?
+1

SQL 인젝션을 막는 데 관심이 있으시면 매개 변수가있는 명령문과 함께 PDO 또는 mysqli를 사용해야합니다. 그렇게하면 삽입 한 내용이 MySQL 코드로 평가되지 않습니다. – jpodwys

+0

SQL 인젝션에 대해서만 이야기하는 것이 아닙니다. 누군가가 사용자가 전달한 변수를 사용하여 내 사이트를 공격 할 수있는 다른 방법이 없습니까? – joe007

+0

@ joe007 예, XSS와 같습니다. –

답변

8

아니요, 직접 설정 했으므로

물론 사용자 입력에서 직접 추론하지 않는 한, 사용자 입력의 모든 비트에 적용되는 것과 동일한 규칙이 적용됩니다.

$_SESSION 변수에는 특별한 것이 없습니다. 데이터베이스 나 세션 등에 저장하더라도 사용자 입력을받을 때 사용자 입력을 위생해야합니다.

JPod가 제안한 것처럼 - SQL 쿼리를 수행 할 때 항상 SQL 주입을 완화하는 준비된 쿼리를 사용하십시오.

+1

네,하지만 _page1_에 $ _SESSION 변수를 설정하고 _page2_에서 읽는다고 가정 해 봅시다. _page1_에서 위생 처리 한 후 _page2_에 신경 쓰지 않으면 해커/크래커가 일부 소프트웨어를 사용하여 $ _SESSION을 (를) 통해 _page2_ (으)로 직접 보낼 수 있습니다. – joe007

+2

@ joe007 프론트 엔드 사용자는'$ _SESSION'에 직접 접근 할 수 없습니다. 입력을 위생적으로 처리하기 전에 (세션 변수에 넣기 전에) 항상 안전하지 않게되는 것은 아닙니다. 보다 일반적으로 고객이 종교적으로 얻고 자비를 베풀지 않는 모든 것을 위생적으로해야합니다. 분명하고, 일관되며, 명시적이고, 한 곳에서해야합니다. 어떤 데이터가 더럽고 어떤 데이터가 깨끗한 지 의심의 여지가 없어야합니다. –

+3

오, 나는 사용자가 어떻게 든 $ _SESSION을 다시 쓸 수 없다는 것을 알지 못했다. 고마워요 :) – joe007

관련 문제