2010-02-25 1 views
4

긴 하루가 지났으나 나 자신의 머리에서 선택할 수없는 것처럼 보입니다.PHP 보안 질문

기본적으로 사용자가 입력 한 값을 삭제하려면 어떻게해야합니까? htmlentities 또는 preg_match 함수 중 하나입니까?

값이 SQL 쿼리로 들어가면 mysql_real_escape_string 함수를 사용하지만 준비된 명령문으로 변경하기 전까지는이를 제거 할 수 있습니다.

또는 htmlentities와 preg_match를 모두 사용하는 것이 좋습니다.

+0

데이터의 용도에 따라 다릅니다. – Gumbo

+0

htmlentities()는 출력 * 값을 살균하는 데 사용됩니다 .-) –

답변

3

previous question에서 이것을 묻지 않았습니까?

이스케이프를 수행하기 전에 preg_match를 사용하여 데이터가 예상 한 허용 목록을 충족하는지 확인하십시오. 그런 다음 데이터베이스 삽입을 위해 이스케이프를 사용하십시오. 이는 심층적 인 방어 (즉, 공격자가 첫 번째 계층을 돌파 할 수있는 경우 보안 검사의 두 단계 이상)라고합니다.

+0

글쎄, 나는 호기심에서 일반적인 질문을하고있었습니다. –

+0

방금 ​​좀 더 명확하게 대답을 업데이트했습니다. 당신은 두 가지 접근 방식을 사용하여 심층 방어를 제공 할 것입니다. 더 많은 레이어를 브레이크하면 앱을 악용하기가 더 어려워집니다. – Mike

+0

+1 수비를 위해. 좋은 물건 마이크 –

0

너무 적은 수의 유효성 검사 및 위생 루틴을 갖는 것이 좋습니다. 중복성을 추가하여 시스템의 안정성을 유지합니다. 이더는 그것의 취약성 또는 그것의 부울, 부울이 아닌 부울이다. 내가 코드를 감사하고있을 때 나는 불완전한 보안 조치를 본다. 나는 그것을 붉은 깃발로 생각하고 더 깊게 파고 갈 것을 장려한다. 이 프로그래머는 편집증을 앓고 있으며 항상 그렇지는 않지만 취약성의 본질을 이해하지 못하는 것입니다.

다른 문제가 있습니다. htmlentities()가 xss를 항상 멈추게하지는 않습니다. 예를 들어, 출력이 <script></script> 태그 또는 심지어 href에 해당하는 경우 어떻게됩니까? mysql_real_escape_string은 항상 SQL injection을 멈추지 않는다. 무엇이 있다면 : 'select * from user where id='.mysql_real_escape_string($_GET[id]);. preg_match 이 문제를 해결할 수 있지만이 경우에는 intval()이 훨씬 더 좋은 기능입니다.

나는 아주 준비된 성명서 팬입니다. 이것은 기본적으로 안전하기 때문에 준비된 구문이 데이터를 손상시킬 수 있기 때문에 mysql_real_escape_string()에 변수를 전달하기 때문에 이것은 훌륭한 접근 방법이라고 생각합니다. 초보자가 모든 검증 루틴을 제거함으로써이 문제를 해결하는 것을 보았습니다. 따라서 중복으로 인해 취약점이 발생합니다. 원인과 결과.

웹 응용 프로그램 방화벽 (WAF)은 계층 의 보안을 향상시키는 방법의 훌륭한 예입니다. WAF는 정규 표현식에 크게 의존합니다. 그들은 더 큰 그림을보고 불쾌한 입력을 막으려 고 노력합니다. 이것들은 절대로 총알이 아니며 사용하는 유일한 보안 수단이되어서는 안되지만 악용을 막을 수 있으며 프로덕션 시스템에 mod_security를 ​​설치하는 것이 좋습니다.

0

기본적으로 사용자가 입력 한 값을 위생적으로 처리하려면 어떻게해야합니까? htmlentities 또는 preg_match 함수 중 하나입니까?

확실히 htmlentities가 아닌, 아마도 보안상의 이유로 preg_match가 아닙니다. 출력의 표현을 (htmlentites fora 웹 페이지, URL은 urlencode, mysql 데이터베이스는 mysql_real_escape_string) 중간으로 바꾼다.

누군가가 실제로 응용 프로그램에 더미 'UNION SELECT'더미 'AS 사용자로 등록하려는 경우'더미 'AS 암호는 이중으로입니다.

공격으로부터 보호하기 위해 코드를 작성하는 것이 다른 유형의 공격을 사전에 탐지하는 것보다 훨씬 효율적입니다.

일부 데이터 입력은 어떤 용도로든 사용하기 위해 특정 형식과 일치해야 할 수도 있습니다. 데이터 캡처와 데이터 사용 사이에 지연이있을 수 있습니다. 사용자가 전자 메일 주소 나 날짜를 입력하라는 메시지가 표시되는 경우 preg_match가 적절할 수 있습니다. 그러나 이것은 보안과 관련이 없습니다.

C.

+0

preg_match에는 보안 관련 모든 것이 있습니다! 이름 필드에 이름과 일치하지 않는 문자를 허용하는 경우 XSS, 데이터 삽입 (SQL 또는 LDAP!) 등에 대한 길을 열었습니다. – Mike

+0

다시 읽습니다. Mike . – symcbean