2013-06-16 2 views
1

내 고객의 사이트에는 40 개의 필드 형식으로 구성된 '온라인 평가'섹션이 있습니다. 각 필드에는 질문에 따라 50에서 200 자까지 허용 할 프로그램이있는 사용자 입력이 필요합니다.데이터베이스에 큰 테이블이있는 것이 안전합니까?

그런 다음 양식이 클라이언트의 메일로 전송되지만 클라이언트가 나중에 모든 양식을 확인할 수 있도록 데이터베이스에도 저장됩니다.

나는 codeigniter를 사용하고 있으며 SQL injection을 방지하기 위해 활성 레코드를 사용했습니다. 또한 나는 다른 질문에 게시 된 방법으로 스팸봇 - 유효성을 검사했다. 나는 css로 숨겨진 필드를 숨겨야한다. 값이 채워지거나 일치하지 않으면 양식이 유효성을 검사하지 않습니다. (Btw, 이것으로 충분합니까? 아니면 captcha를 추가해야합니까?).

코드는 다음과 같이이다 :

<p class="mail"><input type="text" name="mail" id="mail" /></p> //then I hyde this with css 
<input type="hidden" name="mail" value="some value" /> 

후 나는 42 개 필드를 추가하기 때문에 데이터베이스 테이블을 생성 할 때 그것이 경우가

if($this->input->post('mail', true) != '' AND $this->input->post('mail', true) != 'some value') 
{ 
    die('could not send your request'); 
} 
else 
{ 
    process form 
} 

내 질문은, 내가 아는 해달라고한다 확인 내 PC,하지만 내 인터넷 연결이 정말 느려지고 거의 반감. 아마도 공격자가이 양식을 여러 번 채우고 각 필드를 완전히 채우고 데이터베이스를 접을 수 있다고 생각합니까? 이게 가능한가?

테이블을 2 ~ 3 개의 다른 테이블로 나누면 더 안전할까요? 아니면 무의미한가? 나는 보안에 대해 많이 모릅니다. 배울 곳을 찾으려고합니다. 그러나 내가 찾은 모든 정보는 실제로 이해할 수없는 용어로 가득 차 있기 때문에 매우 어렵습니다. 나는 너의 도움을 아주 많이 appreaciate.

편집 : 올바른 방법은 무엇입니까?

+0

'데이터베이스에 큰 테이블을 두는 것이 안전합니까?'아이러니 컬합니다. 데이터베이스는 데이터를 저장하는 것입니다. –

+0

질문 : 그렇습니다. 그러면 악화 될 수 있습니다. 예 : –

+0

정말 큰 테이블을 가지고 있어도 괜찮습니까? 그것이 여러 번 채워지면 붕괴 될 수는 없습니다. – Ant100

답변

6

데이터를 저장하기위한 데이터베이스입니다.

물론 모든 시스템에 제한이 있지만 단일 시스템과 고전적인 관계형 데이터베이스도 있습니다. 모든 프로젝트의 빠른 대부분은 성능에 문제가 없습니다.

여러 테이블로 분할하는 것은 의미가 없습니다.

성능 측면에서 볼 때 쿼리에 적합한 인덱스가 있는지 확인하십시오. 답변을 색인화 할 필요가없고 길이가 다를 수 있기 때문에 텍스트 필드가 스키마에 적합한 선택 인 것처럼 들립니다.

물론 captcha를 사용할 수는 있지만 실제로는 스팸 문제가있는 경우에만 사용하는 것이 좋습니다.

당신이 묘사 한 허니팟 연습은 적어도 현재로서는 좋은 것입니다.

아무리 느린 연결이라도 그 작은 텍스트를 전송하면 채울 것입니다.

그 질문의 모든 명백한 부분에 답변 해 주시기 바랍니다. 더 많은 정보가 필요하면 정확한 문제를 좀 더 정확하게 설명하고 시스템 설정에 대한 자세한 정보를 제공하십시오.

+1

"여러 테이블로 나누면 의미가 없습니다." --- 성능 측면에서 보면 의미가 있습니다. – zerkms

+0

너무 큰 경우 분리하는 것이 좋습니다. @zerkms –

+0

@Gunr Jesra : 실버 총알에 대한 해답은 없지만 ** 많은 ** 데이터가있는 경우 파티셔닝/샤딩은 매우 일반적인 기술입니다 – zerkms

1

서버를 수용하기 위해 정보 저장 시스템의 복잡성을 높이 지 마십시오. KISS 원칙은 잘 알고 있어야합니다. 데이터베이스는 정보를 저장하도록 설계되었으며 일부 웹 응용 프로그램에는 엄청나게 큰 데이터베이스가 있습니다. 보안에 관한 한, 당신이 명백한 것을 알고 있다고 가정하면, 당신은 잘되어야합니다.정말로 원하는 경우 저장된 정보 목록에 타임 스탬프와 IP 주소를 추가 할 수 있습니다 (보안 및 디버깅 이유로 인해 이미 존재하지 않는 경우). 그런 다음 방법을 확인하는 기능을 추가하십시오 최근에 해당 IP 주소로 많은 항목이 입력되어 특정 임계 값을 초과하면 누군가를 잠그고 스팸에 실제로 문제가 발생했을 때만 captcha에 추가 할 수 있지만 사용자 만족도는 떨어집니다. 일부 응용 프로그램은 데이터베이스에 수십 메가 바이트 (수백만 자의 문자)의 이미지를 쉽게 업로드 할 수 있다고 생각하지만이 시점에서 서버의 다른 위치에 저장하는 것이 더 효율적이되어 많은 양의 텍스트 데이터를 단일 표가 문제가되어서는 안됩니다.

+0

이미지가 오면 데이터베이스가 아닌 데이터베이스에 저장해야합니다. 타임 스탬프와 IP 주소를 더 자세히 살펴볼 것입니다 (먼저 사용자의 IP 주소를 추적하고 저장할 수있는 방법을 배워야합니다). 그리고 나서 방금 말한 논리를 구현하십시오. 고마워요! – Ant100

+1

@ Ant100 ip! = user, 사용자를 추적하려면 시스템에 적절한 로그인이 필요합니다. –

+0

@ 대각선. 흠 ... 그렇다면 환경 주의자는 무엇을 언급하고 있습니까? – Ant100

관련 문제