2013-08-15 2 views
0

웹 페이지 프로그래밍 방법을 잘 모르겠습니다. 다음 질문이 있습니다. 나는 사용자가 관리 할 수있는 MySQL 데이터베이스를 가지고있다. 두 테이블이 있습니다 : 사람, 비디오.안전한 기본 키 제출

예를 들어 이름으로 사람 테이블에서 사람을 선택하고이 사람을 비디오 링크와 연결하도록 내 페이지를 원합니다. 데이터베이스에있는 사람을 선택 는

SELECT personID, name 
FROM persons 
WHERE name LIKE '%John%' 

는 이제 사용자는 외부 키 personID이있는 비디오 테이블에 동영상 링크를 삽입 할 수 있으며, 간단합니다.

숨겨진 HTML 입력 양식에서 "선택"다음에 사람의 기본 키를 저장할 수는 있지만 편집 할 수 있으므로 매우 안전하지 않다고 생각합니까?

내 질문은 : 선택 및 삽입 호출간에 이러한 키 값을 어디에 저장하겠습니까? 이 데이터를 모두 세션에 저장하는 것이 더 안전합니까?

+0

완벽하게 실현 가능한 데이터베이스에 2 명의 John이 있다면 어떨까요? – Jimbo

+0

그는 이름과 성을 포함한 드롭 다운 상자를 가져와 정확한 이름을 선택합니다. 그러나 좋은 점 :) – Stefan

+0

사용자가 모든 이름의 비디오를 편집 할 수 있습니까? – tobspr

답변

2

이런 종류의 일이 꽤 많이 발생하고 사람들이 기본 키를 보지 않는 한 은 완전히 괜찮습니다. (숫자 일 경우 걱정할 사항이 아니어야합니다.)

테이블에서 행 목록을 검색하여 HTML로 표시한다고 가정 해 보겠습니다. 각 테이블 행에 DOM과 데이터베이스에서 행을 삭제하기위한 '삭제'버튼을 XMLHttpRequest를 통해 사용하려면 각 행에 "id"속성이 있고 일반적으로 id가 삭제할 행의 기본 키 값입니다.

일반적으로 기본 키는 다음과 같습니다

  • AUTO_INCREMENT와 필드는 각각하는 data-id 속성을 드롭 다운 한마디로

, 줄을 설정

  • 테이블에 id 필드하는 당신을 .data 선택기를 통해 자바 스크립트에 액세스하십시오. 그 정도면 충분합니다. SQL Injection에서 자신을 보호하고 PDO와 준비된 진술을 사용하면 괜찮을 것입니다.

    추가 보호를 위해 제출 전에 클라이언트가 data-id 속성을 변경하지 않았는지 확인하려면 id이 데이터베이스의 name 필드에 해당하는지 확인하십시오.

  • +0

    글쎄, 이름이 ID와 일치하는지 다시 한번 확인해 볼 수있을 것 같다. 다른 한편, 왜 ID를 유지해야할까요? 그가 비디오'insert'를 할 때 완전한 사람 이름을 다시'선택'하고 DB에서 ID를 얻을 수도 있습니다. 나는 이것이 (두 번 사람을 선택했기 때문에) SQL 쿼리를 두 배로 만들 것이고, 아마도 몰라서 성능상의 문제를 일으킬 수도 있다고 생각했다. – Stefan

    +0

    아키텍처 질문이지만 MySQL은 수천 개의 쿼리를 처리 할 수 ​​있도록 설계되었으므로 다른 쿼리를 수행하기 전에 하나의 쿼리에서 검사를 수행 할 때 측정 속도가 느려지지 않습니다. 규칙 # 1 - 조기에 마이크로 최적화하지 마십시오 :) – Jimbo

    +0

    @Stefan 또한 ID와 이름을 유지하고 POST를 통과 할 때 두 테이블을 나머지 테이블 행과 대조하여 관련 있는지 확인합니다. 그렇다면, 그들은 훼손되지 않았다. btw라는 이중 쿼리를 수행 할 필요조차 없습니다. 만약 당신이 업데이트한다면, 당신은 단지'id =? s AND name =? s' 등을 업데이트 할 것입니다. – Jimbo

    0

    나는이 유형의 데이터를 세션에 저장하는 것이 보안이고 좋은 선택이라고 생각합니다. 결국 세션 스코프이므로 출력 할 이유가 없습니다. 세션에 저장하고 액세스하고 관리하기가 더 쉽습니다.