2011-04-19 2 views
1

나는 이것들을 많이 읽었지만 적절하게 대답하지 못했다고 생각되는 질문이 몇 가지 있습니다. 링크가 있으면 저에게 연락해 주시면 고맙겠습니다.PHP 로그인 시스템 질문

나는 PHP 로그인 시스템을 가지고 있으며 사용자가 등록하고 로그인하는 커뮤니티 사이트가 될 것입니다. 이제 다음과 같은 것들에 당신의 도움이 필요합니다 :

  1. 대부분의 사이트 (WP, Joomla, FB, et al)는 어떤 해시 알고리즘으로 충분합니까? 간단한 MD5와 소금? 또는 무엇을?
  2. 내가 처리해야하는 공격은 커뮤니티 위주의 사이트에있는 일급 비밀 사이트와 구분됩니다 (Juts 목록 및 해당 내용에 대한 간략한 설명이 있음)
  3. PDO 및 MySQLi는 (나는 PHP는 후자의 권장 보았다하지만 난 너희들을 듣고 싶습니다) (당신은 SQL 주입 공격 및 XSS 특히주의해야합니다)

고마워, 스테파노

+2

저는 이것이 많은 질문이라고 생각합니다. 나는 당신이 각 질문을 개별적으로 물으면 훨씬 더 나은 반응을 얻을 것이라고 생각합니다. 스택 오버플로는 포럼이 아니며 질문 응답 사이트이므로 이상적으로 각 게시물은 전체 질문이 아닌 하나의 질문입니다. –

+0

@MildFuzz : 보안 문제는 간단하고 짧은 대답으로 쉽게 설명 할 수있는 복잡한 문제이므로 충분히 구체적으로 질문 할 필요가 있습니다. [이 질문] (http://programmers.stackexchange.com/questions/46716/what-should-a-developer-know-before-building-a-public-web-site)을 참조하십시오. 특히 보안 부분, 그것은 당신에게 좋은 그림을 줄 것입니다. 질문이 구체적 일수록 답변이 더 좋습니다. 스택 오버플로에 오신 것을 환영합니다. 우리의 [FAQ] (http://stackoverflow.com/faq)도 읽을 시간이 필요합니다. – Trufa

+0

당신이 볼 수 있듯이 고맙게도, 나는 Daniweb에 익숙하다. 나는 가능한 한 많은 것을 극복하려고 노력할 것이다. 지금 답변을 요약 해 주시고 고맙습니다;) –

답변

2

1 (대부분의 사이트에 대한 충분한 무엇 해싱 알고리즘 WP, 줌라, FB, 등)? 간단한 MD5와 소금? 또는 무엇입니까

최소한 소금으로 MD5를 사용해야합니다. MD5가 다른 사용 가능한 알고리즘과 비교하여 상당히 안전하지 못하다는 것이 증명되었으므로 다른 해싱 알고리즘을 사용하는 것이 이상적입니다. 사용 가능한 다른 것들을 여기에서보십시오 hash(). 개인적으로 나는 SHA512를 사용했고, 사용자 당 소금을 사용했다.

사용자 당 소금을 사용한다는 것은 데이터베이스를 보류하는 침입자가 모든 암호를 한 번에 깨기보다는 사용자별로 암호를 해독해야한다는 것을 의미합니다.

2. 주요 공격 SQL Injection 공격 것

지역 사회 중심의 사이트에 존재하는, 나는이 떨어져 일급 비밀 사이트를 형성하는 처리해야 공격 무엇입니까 (중 데이터베이스를 훔치거나하는 사이트에 악성 코드 삽입). 공격자가 Cross-Site Scripting 공격과 결합하여 공격자가 사이트에 자신의 코드 (예 : < 스크립트 > 태그)를 삽입하여 사용자를 감염시킬 수 있습니다.

이 두 가지 공격은 데이터베이스로 들어오는 모든 변수를 이스케이프 처리하고 사용자가 제출 한 데이터에서 HTML (또는 특수 문자)을 제거하여 완화 할 수 있습니다. PDO와 MySQLi

나는 다른 사람이 답변을 떠나이 질문 중에서 최고입니다 무엇

3. - 나는 차이에 위로를 흘려 주기도 아니에요있다.

희망이 있습니다.

+1

로그인 시스템을 올바르게 사용하는 것은 어려운 작업이므로, 매우주의 깊고 ** 항상 ** sanitze하고 사용자 입력을 검증해야하며, XSS voulnerabilities도 있습니다. ** 매우 ** 일반적이고 때로는 잡기가 어렵다. [this ansnwer] (http://programmers.stackexchange.com/q/46716/)의이 구절은 나와 함께 붙어있다. 자신의 멋진 인증 시스템 : 미묘하고 검증 할 수없는 방식으로 잘못 처리하는 것은 쉬운 일이며 해킹 된 후에야 알 수 있습니다. ' – Trufa

+0

소금에 대한 사용자 이메일을 사용합니까? – AntonioCS

+0

당신은 할 수 있겠지만 사용자마다 무작위로 하나 생성하여 DB에 저장하는 것이 공격자가 암호를 비교할 수있는 암호 해시를 생성 할 가능성이 적어집니다 (전자 메일을 알고 있기 때문에 ' ($ i = 0, $ i <10, $ i ++) {$ salt. = chr (rand (33,122))}}에 대해 다음과 같이 '$ salt =' ' (기호, 문자 및 숫자 포함) – fin1te

0

내가 MD5 아주 좋은 생각하지 않는다, 따라서이 MD5 디코더를 처리하는 또 다른 유래 질문입니다. 온라인에서 찾은 SHA1 디코더가 작동하지 않습니다. 어떤 사람들은 SHA1이 느리다고 말하지만, 로그인하는 데 신경 쓰는 이유 만 이해할 수는 없습니다.

Mysqli는 주입 공격을 막아 야합니다.

실패한 로그인 시도에 대한 정보를 너무 많이 제공하지 않도록하십시오. 나쁜 예 : "사용자 이름은 알지만 비밀번호가 잘못되었습니다." 좋은 예 : "사용자 이름과 비밀번호가 일치하지 않습니다"-> 사용자 이름이 데이터베이스에없는 경우에도 모든 실패한 로그인에이 옵션을 사용하십시오.

+0

감사합니다. 그것은 매우 유용한 팁입니다. 단일 기능을 사용하여 모든 오류를 기록하므로 사이트가 인터넷에 연결되면 해제 할 것입니다. –