2009-06-11 2 views
2

저는 주로 데스크톱 프로그래밍 배경을 가지고 있습니다. 여유 시간에는 웹 개발에 몰두하여 페이지를 문제에서 해결책으로 바꾸어 놓았습니다. 내가 사이트 로그인을 허용하고 사용자 커뮤니티에서 일부 데이터를 수집해야한다는 요점에 도달했습니다 (어쨌든 계획입니다).웹 양식 UI의 보안을 유지하기 위해해야 ​​할 일은 무엇입니까?

그래서 저는 보안되지 않은 사이트를 장식하고, 파손하고 타협하기 위해 열심히 기다리는 사악한 사용자가 있다는 것을 알고 있습니다. 내가 정말로 운이 좋다면, 두 사람의 사용자가 내 사이트로 갈 수 있습니다. 나는 그들을 위해 합리적으로 준비되고 싶다.

로그인 한 사용자로부터 정보를 수집 할 수있는 UI가 있으며 일부 정보는 HTML 페이지로 렌더링됩니다. 내 사이트는 PHP/MySQL의 백엔드 및 몇 가지 자바 스크립트 물건으로 전면에 구현됩니다. 내가 어떤 제안에 관심이 있어요/I는 다음과 같은 문제를 해결하는 방법에 대한 조언 :

  • 크로스 사이트 스크립팅 : 내가 입력을 표시 지원하지 않는하고 있기 때문에이 나를 ​​위해 합리적으로 간단 할 것입니다 바라고, 단지 일반 텍스트. 내가 [A-Za-z] *를 스캔하고 다른 모든 것을 던져야할까요? 나는 여기에서 사용할 수있는 공격 유형에 대해 아주 무지합니다. 그래서 당신의 조언을 듣고 싶습니다.

  • SQL injection : 나는 여기에 매개 변수화 된 쿼리 (mysqli)를 사용하고 있으므로이 부서에서 괜찮 으면 좋겠다. 나 자신을 보호하기 위해 사용자가 입력 한 데이터에 대해 추가 검증이 필요합니까?

  • 거친 행동 : 나는 Google지도에서 사용자가 그린 폴리 라인을 지원합니다. 그래서 (약간의 트래픽을 얻을만큼 운이 좋은 경우) 서유럽을 가로 지르는 몇 개의 손으로 그린 ​​phallices를 볼 것으로 예상됩니다. 일부 사용자 주도 중재 (플래그 inaproriate SO 스타일) 구현할 계획입니다 있지만이 동작 종류를 방해 다른 제안에 관심이있을 것입니다.

  • 로그인 : current login system은 매우 간단한 웹 양식, PHP의 MySQL 검색어, mp5로 인코딩 된 비밀번호 확인 및 저장된 세션 쿠키입니다. 시스템이 안전하기에 충분히 간단하기를 바랄뿐입니다. 그러나 나는 그들이 알지 못하는 취약성이 있는지 궁금합니다.

여기 너무 장황하지 않아서 귀하의 의견을 기다리 길 바랍니다.

답변

1

크로스 사이트 스크립팅은 htmlentities로 손쉽게 처리 할 수 ​​있습니다. 또한 태그를 포스트에서 제거하는 strip 태그라는 기능이 있으며 특정 태그를 허용 목록에 추가 할 수 있습니다. 나중에 특정 태그를 허용하도록 결정하면 이러한 태그의 속성이 어떤 식 으로든 지워지지 않는다는 것을 명심하십시오.이 태그를 사용하여 페이지 (onClick 등)에 자바 스크립트를 삽입 할 수 있으며 실제로는 권장하지 않습니다. 장래에 포맷팅을 원한다면 (예 : [b]와 같이 굵게 또는 유사한 것과 같은) 포맷 언어를 구현하여 사용자가 페이지에 곧바로 HTML을 입력하는 것을 막을 것을 권장합니다.

SQL 인젝션은 사용자가 명령문을 준비한 다음 준비된 명령문에 인수로 사용자 데이터를 전달할 수 있으므로 쉽게 관리 할 수 ​​있습니다. 그러면 모든 사용자 입력이 sql 문을 수정하지 못하게됩니다.

CSRF (교차 사이트 요청 위조)는 공격자가 양식을 사용하여 피해 계정의 데이터를 제출할 수있는 간과 용의 흔히 볼 수있는 취약점입니다. 이것은 일반적으로 img src에 대한 get string 형식을 지정하여 수행합니다 (이미지가 대상에로드되고 get로드 및 양식이 처리되지만 사용자는 인식하지 못합니다). 또한 게시물을 사용하는 경우 공격자는 javascript를 사용하여 숨겨진 양식을 자동 제출하여 위와 동일한 작업을 수행 할 수 있습니다. 이 문제를 해결하려면 각 양식에 대한 키를 생성하여 세션에서 키를 생성하고 양식 자체에서 키를 숨겨진 입력으로 사용해야합니다. 양식이 제출되면 입력의 키와 세션의 키를 비교하고 일치하는 경우에만 계속하십시오.

일부 보안 회사에서는 로그인 양식에 'autocomplete = "off"'특성을 사용하여 암호가 저장되지 않도록하는 것이 좋습니다.

+0

strip_tags가 내가 찾고있는 것 같습니다. 필자가 소비하는 데이터에 멋진 포맷을 구현하는 것은 의심 스럽지만 그 내용에 대한 개요에 감사드립니다. 또한 CSRF 사건을 다루는 방법을 살펴볼 것입니다. 매우 간단합니다. 건배. – RedBlueThing

1

XSS와 비교하여 htmlspecialchars가 충분하면 출력을 지우는 데 충분합니다. SQL injection : mysql이 매개 변수를 추가하기 전에 쿼리를 구문 분석하면 afaik가 악의적 인 것을 주입 할 수 없습니다.

2

첫 번째 문제는 UI에 관심이 있다는 것입니다. 따라야 할 간단한 규칙은 제출 된 데이터가 사용자가 만든 UI에서 온다고 가정해서는 안됩니다. 들어오는 데이터를 신뢰하지 말고 데이터 유출을 방지하십시오. PHP의 strip_tags 및/또는 htmlentities를 사용하십시오.

특정 문자 (<,>, ", ')는 HTML을 엉망으로 삽입 할 수 있지만 허용되어야합니다. 특히 암호는 htmlentities를 사용하여 허용됩니다. 특정 문자가 "이스케이프 처리"없이 출력되었습니다.

자바 스크립트 기반 검사 및 유효성 검사는 사용자 경험을 향상시키는 데에만 사용되어야합니다 (예 : 페이지 다시로드 방지). 절대적인 최후의 수단을 제외하고는 eval을 사용하지 마십시오.

+0

분명히 분명해야합니다.이 유효성 검사는 PHP의 서버에서 이루어지며 제출 내용의 출처에 대한 가정은 없습니다. 좋은 포인트 생각 :). – RedBlueThing

+0

다중 바이트 문자 세트로 작업하는 경우 htmlentities 대신 htmlspecialchars를 사용하십시오. – erenon

1

나는 [A-Za-z] *를 (를) 귀하의 페이지에만 허용하는 것 외에 다른 것을 살펴볼 것입니다. 이제는 서식 지정 마크 업을 허용 할 의사가 없기 때문에 선상에 필요가 없다는 것을 의미하지는 않습니다. 개인적으로 나는 미래의 필요에 적응하도록 설계하지 않은 것을 다시 작성하는 것을 싫어합니다.

허용 된 태그의 화이트리스트를 작성하고 필요에 따라 추가/제거하거나 일반 텍스트로 제출 된 마크 업을 인코딩 할 수 있습니다.

관련 문제