질문 표가 있는데이 표의 기본 키는 자동 증분이있는 "id"입니다. 이제는 질문 관리를위한 제어판을 만들고 있습니다. 제어판의 기능 중 하나는 삭제 질문입니다. 이제 내 질문 : 질문 태그의 기본 키를 HTML 태그의 식별자로 클라이언트에 보내 사용자가 HTML 태그를 클릭하여 질문을 삭제할 때 질문의 기본 키를 서버에 보내 질문을 삭제하도록합니다. 보안면에서 위험한가? 더 나은 해결책이 있습니까?기본 키를 사용하여 테이블에서 삭제할 레코드를 식별해야합니까?
답변
삭제할 레코드를 식별하기 위해 기본 키와 다른 고유 한 열 집합을 사용하는 것과 관련된 질문 인 경우 데이터베이스 수준의 보안에는 차이가 없습니다.
예를 들어다음과 같은 열이있는 테이블이있는 경우 :
id - primary key
subject -
serial_number -
...
other fields
subject + serial_number
또는 각 행에 대해 고유 한, 그것은 당신이 대
delete from table where id = '&id'
을 여부를 보안의 관점에서 차이가 없습니다를
delete from table where serial_number = '&1' and subject = '&2'
기본 키를 사용하여 삭제하는 것이 좋을 수도 있습니다. b e 빨리.
그러나이 h 제는 html 페이지에서 트리거되기 때.에 페이지를 보호하고 우발적 인 h 제를 방지하는 f}을 반드시 볼 필요가 있지만 기본 키 대 다른 필드의 사용에 영향을주지 않습니다 레코드를 삭제합니다.
는
<a href="YOUR_URL_TO_DELETE/ID_TO_DELETE">YOUR_ANCHOR</a>
나는이 방법으로 발생하는 주요 문제 thah이 링크를 따라 할 수있는 모든 스크립트가 테이블에서 레코드를 삭제할 수 있습니다를 사용하려는 것처럼 보인다. POST 메소드가있는 양식을 사용하고 요청을하기 전에 사용자에게 확인 대화 상자를 표시하십시오.
질문은 매우 어렵습니다.하지만 "상태를 변경하는 작업에 GET을 사용해야합니까?"라는 질문에 답을 얻을 수도 있습니다. 대답은 "아마도 그렇지 않습니다"입니다.HTTP 사양은 서버 상태를 변경하는 GET 요청을 금지하지 않지만 강력하게 권장하지 않습니다. – GordonM
모든 요청은 ID, POST 또는 웹 서비스 호출이있는 HTTP GET 형식으로 제공되는지 여부에 관계없이 유효성을 검사해야합니다.
제대로 만들어진 웹 사이트는 IP 주소 추적 및 요청 빈도 분석에 의존하는 봇 (bot)에 대한 보호가 필요합니다. 숨겨진 ID는 어떤 사람들이 쉘 스크립트를 작성하여 일련의 객체를 얻지 못하도록하지만 어떤 종류의 무차별 대입 공격을 사용하여 웹 사이트를 악용 할 수있는 다른 방법이 있습니다.
ICQ ID는 사용자와 관련되어 있으며 사용자의 기본 식별 수단이기 때문에 유용합니다. 이는 다른 서비스, 프로그램 또는 웹 사이트에서 사용하지 않는 사용자 인증에 대한 유일한 접근 방식입니다.
결론 그렇습니다. 스크래퍼와 DDoS 공격 및 데이터 보호와 많은 다른 것들에 대해 걱정할 필요가 있지만, 숨겨진 ID는 이러한 문제를 제대로 해결하지 못합니다.
- 1. 큰 테이블에서 레코드를 삭제할 때 MySQL이 느려집니다.
- 2. FULLTEXT 인덱스가있는 테이블에서 기본 키를 삭제할 수 없습니다.
- 3. 왜이 테이블에서 레코드를 삭제할 수 없습니까?
- 4. googledatastore를 사용하여 테이블에서 기본 키를 설정하는 방법.
- 5. 테이블에서 여러 개의 외래 키를 사용하여 하나의 기본 키를 선택하십시오.
- 6. mysql의 테이블에서 기본 키를 삭제합니다.
- 7. 레코드를 삭제할 수 없습니다.
- 8. 표면 응용 프로그램에서 수행되는 기본 제스처를 식별해야합니까?
- 9. 봄 + 최대 절전 모드 : 테이블에서 레코드를 삭제할 수 없습니다.
- 10. PetaPoco가 GUID newid 기본 키를 사용하여 레코드를 삽입하지 못합니다.
- 11. LINQ를 사용하여 기본 키가없는 테이블에서 레코드를 삽입/업데이트/삭제하는 방법
- 12. 모든 테이블에서 동일한 기본 키를 사용해도됩니까?
- 13. 동일한 테이블에서 기본 키를 두 번 참조하십시오.
- 14. Codeigniter - 하위 테이블에서 기본 키를 사용하는 곳
- 15. 데이터베이스의 모든 테이블에서 기본 키를 다시 할당
- 16. 테이블에서 레코드를 삭제할 때 사전 또는 사후 확인
- 17. 테이블의 기본 키를 사용하여 다른 테이블에서 한 테이블의 요소를 참조하고자합니다.
- 18. java.lang.IndexOutOfBoundsException 레코드를 삭제할 때
- 19. MySQL 리소스를 사용하여 레코드를 삭제할 수 있습니까?
- 20. 코어 데이터를 사용하여 레코드를 삭제할 수 없습니다.
- 21. PHP를 사용하여 MySQL에서 레코드를 삭제할 수 없습니다.
- 22. Entity Framework를 사용하여 레코드를 삭제할 수 있는지 확인하는 방법?
- 23. InstallShield를 사용하여 RegDBDeletekey가있는 키를 삭제할 수 없습니다.
- 24. JPA, 레코드를 삭제할 수 없습니다
- 25. Linq 거래를 사용하여 동일한 기본 키를 가진 레코드를 삭제하고 삽입하는 방법
- 26. Memcached에서 레코드를 업데이트하는 것보다 레코드를 삭제할 때의 이점은 무엇입니까?
- 27. SSIS가 테이블에서 외래 키를 얻는 방법은 무엇입니까?
- 28. OneToMany 관계가있는 레코드를 삭제할 수 없습니다.
- 29. 레코드를 삭제할 수 없습니다. 사용자
- 30. 중복 된 기본 키를 사용하지 않는 각 외부 키에 조인 된 테이블에서 첫 번째 레코드를 가져
귀하의 질문에 따라하기가 매우 어렵지만 "기본 키를 사용하여 테이블에서 삭제하려는 레코드를 식별해야합니까?" 그 대답은 "예"입니다. 보안과 관련하여 요청이 유효한 사용자에 의해 만들어지고 그 사용자에게 질문을 삭제할 권한이 있는지를 판별하는 것은 서버 스크립트의 책임입니다. – GordonM