2017-09-11 13 views
-1

사용자가 이름, 이메일, 제목 및 메시지를 입력해야하는 표준 HTML 문의 양식이 있습니다. 필드는 모두 클라이언트와 서버 측에서 이미 유효성이 검사됩니다 (비어 있으면 안되며 전자 메일은 올바른 전자 메일 주소 여야 함 등). 서버가 너무 길지 않은지 (클라이언트의 최대 길이와 서버의 strlen을 사용하여) 확인해야 할 필요가 있다고 생각하십니까? 확인하지 않고 악의적 인 사용자가 수천 또는 수백만 자의 문자와 같이 긴 텍스트를 입력하면 어떻게됩니까? 서버 성능에 영향을 미칩니 까? 또는 확인하지 않는 것이 안전합니까?양식 입력에 길이를 표시해야합니까?

+0

[SQL-Injection] (https://en.wikipedia.org/wiki/SQL_injection)과 같은 것이 있습니다. 하지만 최대 길이를 초과하는지 확인하는 것이 가장 좋은 방법은 아닙니다. 예를 들어 50 자로 설정하면 다른 사람이 45 자 길이의 문자를 보낼 수 있기 때문입니다. 어쩌면 특정 문자를 필터링해야합니까? – Granny

+0

예, SQL 주입에 대해 알고 있습니다. 그러나 양식은 메일을 통해 직접 메시지를 전송하므로 관련된 SQL이 없습니다. 나는 단지 사용자가 PHP에서 문자열 변수로 처리 할 수있는 슈퍼 긴 텍스트를 입력하면 어떻게되는지 알고 싶었습니다. – LoveTyger

+0

오, 죄송합니다, 나는 SQL을 보았다고 맹세 할 수 있습니다 ... 내 잘못. – Granny

답변

0

SQL에서 최대 크기보다 긴 문자열을 전달하면 잘립니다.

수천 개의 문자 (예 : 메시지 필드)를 보내는 경우 서버 성능에 미치는 영향은 최소화됩니다. 서버는 요청을 받아서 메모리로 가져 와서 mysql으로 보내야한다.

게시 된 데이터를 처리하고 데이터베이스를 쿼리하는 데 권장되는 모든 방법을 사용한다고 가정 할 때 사용자가 기가 바이트 단위의 데이터를 보내면 메모리 소모가 발생할 수 있습니다. PHP는 요청 당 메모리의 양이 비교적 적기 때문에 사용자가 보내는 것만 영향을줍니다.

mySQL의 텍스트 열을 제한하지 않으면 결국 기가 바이트의 데이터를 저장하게됩니다. 악의적 인 사용자가 이런 종류의 요청으로 홍수를 치면 전체 디스크로 끝날 수 있습니다. 또는 정상적인 대역폭/스토리지 비용보다 높습니다.

+0

고맙습니다.하지만 제 경우에는 SQL이 없습니다. 이 양식은 데이터를 처리 한 다음 전자 메일을 보냅니다. 나는 PHP 메모리 제한이 여전히 관련되어 있다고 생각하십니까? 따라서 128MB이고 사용자가 128MB보다 큰 것을 보내면 보내지 않을 것입니다. – LoveTyger

+0

게시 된 양식 데이터를 처리 할 때 PHP에서 치명적인 오류가 발생합니다. 사용자는 505 http 상태를 수신하게되고 프로세스가 거기에서 끝날 것이므로 메일을 보내지 않습니다. mysql에 저장하는 대신 메일을 보내는 경우에도 동일한 제한이 적용됩니다. 서버는 어딘가에 데이터를 전송해야하므로 대역폭 사용량이 있습니다. 그리고 만약 당신이 자신의 메일 서버에 디스크 사용량을 보내고있다. – Salketer

+0

505 => 500 죄송합니다. – Salketer