차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| tech:php [2018/12/17 15:17] – [Thread Safe?] V_L | tech:php [2025/07/27 15:58] (현재) – [safe mode 를 사용하라] V_L | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| {{tag> | {{tag> | ||
| ======PHP====== | ======PHP====== | ||
| + | |||
| + | =====설치===== | ||
| + | 업데이트 | ||
| + | |||
| + | > sudo apt update | ||
| + | > sudo apt upgrade | ||
| + | |||
| + | [[NGINX]]의 경우 | ||
| + | |||
| + | > sudo apt install php8.3-fpm | ||
| + | |||
| + | |||
| + | |||
| + | | ||
| + | 필수 확장 설치 | ||
| + | |||
| + | > sudo apt install php8.3-common php8.3-mysql php8.3-xml php8.3-xmlrpc php8.3-curl php8.3-gd php8.3-imagick php8.3-cli php8.3-dev php8.3-imap php8.3-mbstring php8.3-opcache php8.3-soap php8.3-zip php8.3-intl php8.3-sqlite3 | ||
| + | |||
| + | |||
| + | 확인 | ||
| + | |||
| + | > php -v | ||
| + | |||
| + | PHP 8.3.7 (cli) (built: May 13 2024 15:37:39) (NTS) | ||
| + | Copyright (c) The PHP Group | ||
| + | Zend Engine v4.3.7, Copyright (c) Zend Technologies | ||
| + | with Zend OPcache v8.3.7, Copyright (c), by Zend Technologies | ||
| =====기본===== | =====기본===== | ||
| 줄 7: | 줄 34: | ||
| **Thread Safe 와 Non Thread Safe** | **Thread Safe 와 Non Thread Safe** | ||
| - | 우선 윈도우용 PHP는 항상 Thread Safe 버전으로 나왔었다. | + | 우선 윈도우용 PHP는 항상 |
| 이유는 윈도우가 멀티쓰레드 방식인데 PHP 는 멀티프로세스 방식으로 개발 되었기 때문이다. | 이유는 윈도우가 멀티쓰레드 방식인데 PHP 는 멀티프로세스 방식으로 개발 되었기 때문이다. | ||
| 참고로 [[tech: | 참고로 [[tech: | ||
| 줄 18: | 줄 45: | ||
| 이 퍼포먼스 문제를 개선한 것이 Non Thread Safe 버전이라고 생각하면 되겠다…^^ | 이 퍼포먼스 문제를 개선한 것이 Non Thread Safe 버전이라고 생각하면 되겠다…^^ | ||
| - | 정리를 하자면 아래와 같이 설치하면 된다. | + | 정리를 하자면 |
| + | |||
| + | NTS는 | ||
| + | - 다중 스레드 | ||
| + | - FAST CGI 호환을 위해 | ||
| + | TS는 | ||
| + | - 단일 스레드 | ||
| + | - SAPI와 PHP 호환을 위해 | ||
| + | |||
| + | |||
| + | 결론적으로 | ||
| * Windows + IIS(ISAPI) --> Thread Safe 버전 | * Windows + IIS(ISAPI) --> Thread Safe 버전 | ||
| 줄 1229: | 줄 1266: | ||
| 주민등록 번호의 경우 수정시 라도 보여 주지 않는 것이 좋다. | 주민등록 번호의 경우 수정시 라도 보여 주지 않는 것이 좋다. | ||
| - | input text 박스만 보여 주고 옆에 | + | input text 박스만 보여 주고 옆에 |
| - | + | 회원 비번은 md5() 로 암호화 하구요. 쿠키는 사용하지 마세요. | |
| - | + | ||
| - | + | ||
| - | 회원 비번은 md5() 로 암호화 하시구요. 쿠키는 사용하지 마세요. | + | |
| 회원이 비번을 잊어 버렸을 경우는 회원 email 주소로 새로운 비번을 쏴주시구요. | 회원이 비번을 잊어 버렸을 경우는 회원 email 주소로 새로운 비번을 쏴주시구요. | ||
| 줄 1256: | 줄 1290: | ||
| $userpass 값은 32 자 인지 확인 하면 된다. md5() 로 해슁 하면 32자가 됩니당. | $userpass 값은 32 자 인지 확인 하면 된다. md5() 로 해슁 하면 32자가 됩니당. | ||
| - | if((session_is_registered(username)) && (session_is_registered(user_id))) | + | |
| - | session_is_registered() 를 사용하시구요.. | + | session_is_registered() |
| + | |||
| + | 를 사용하시구요.. | ||
| $pw 도 암호화 하세용..!!! | $pw 도 암호화 하세용..!!! | ||
| 줄 1263: | 줄 1299: | ||
| 비교는 | 비교는 | ||
| - | if($pw=====md5($pw넘어온값) && isset($pw넘어온값)) | + | |
| + | | ||
| 이런식으로 체크 하시구용...^^ | 이런식으로 체크 하시구용...^^ | ||
| 좀더 고심해 보시고 응용해보라 ^^ | 좀더 고심해 보시고 응용해보라 ^^ | ||
| - | $tpass=md5(" | + | |
| - | if(($id | + | if(($id == " |
| 이런 식으로 ^^ | 이런 식으로 ^^ | ||
| 줄 1471: | 줄 1508: | ||
| - | ==== 세션 쿠키값 - 보안 로그인 시스템 | + | ==== 세션 쿠키값 - 보안 로그인 시스템==== |
| $userid | $userid | ||
| 줄 1524: | 줄 1561: | ||
| 윈도우는 잘 모르겠다. | 윈도우는 잘 모르겠다. | ||
| openSSL 를 반드시 사용하라 ^^ | openSSL 를 반드시 사용하라 ^^ | ||
| + | |||
| + | [[tech: | ||
| http:// | http:// | ||
| 줄 1591: | 줄 1630: | ||
| php.ini 중에서 일부 | php.ini 중에서 일부 | ||
| + | |||
| < | < | ||
| ; Safe Mode | ; Safe Mode | ||
| 줄 1607: | 줄 1647: | ||
| .inc 보다는 .inc.php 로 저장 하기 ! | .inc 보다는 .inc.php 로 저장 하기 ! | ||
| httpd.conf | httpd.conf | ||
| - | <Files ~ " | + | |
| + | <file ~ " | ||
| Order allow,deny | Order allow,deny | ||
| Deny from all | Deny from all | ||
| - | </Files> | + | </file> |
| (2) turn Indexes directive to off by default per website | (2) turn Indexes directive to off by default per website | ||
| 줄 1625: | 줄 1666: | ||
| ====PHP 에러 출력 안하기==== | ====PHP 에러 출력 안하기==== | ||
| - | 보안을 위해서는 필수. | + | [[tech: |
| php.ini의 Error_Handling 부분에서 display_errors = Off 로 설정해 주면 된다. | php.ini의 Error_Handling 부분에서 display_errors = Off 로 설정해 주면 된다. | ||
| 줄 1635: | 줄 1676: | ||
| Example 1. strip_tags() example | Example 1. strip_tags() example | ||
| - | $string = strip_tags($string, | + | |
| + | | ||
| $string 에서 < | $string 에서 < | ||
| 줄 1641: | 줄 1683: | ||
| 그런데 문내가 존재 한다.< | 그런데 문내가 존재 한다.< | ||
| - | <b onmouseover=" | + | |
| 이런 문장을 쓸 경우 문내가 된다..ㅋㅋㅋ | 이런 문장을 쓸 경우 문내가 된다..ㅋㅋㅋ | ||
| 만약 | 만약 | ||
| - | <b onmouseover=" | + | |
| 글구 <a> 태그를 허용해도 <a href="" | 글구 <a> 태그를 허용해도 <a href="" | ||
| 줄 1653: | 줄 1695: | ||
| 음 넘 초보적인 방법이지만 그래두 함 적어보겠다. | 음 넘 초보적인 방법이지만 그래두 함 적어보겠다. | ||
| - | 만약 게시판에 관리자 모드가 있다면...그 곳많은 보안이 상당히 많이 필요하겠지염. | + | 만약 게시판에 관리자 모드가 있다면...많은 보안이 필요. |
| - | 보안을 위해서 이런 저런 방법을 많이 사용하실테구염. | + | 사용하는 방법에 아주 간단한 자바스크립트를 추가 한다면 좋다. |
| - | 사용하시는 방법에 아주 간단한 자바스크립트를 추가 한다면 좋을 듯 한다. | + | |
| + | < | ||
| function goto_page($url) { | function goto_page($url) { | ||
| echo "< | echo "< | ||
| } | } | ||
| - | + | </ | |
| - | 보안이 조금이나마 필요한 부분에선 이 함수를 사용해서 이동했던 페이지들을 히스토리에서 삭제를 하는 것이지 | + | 보안이 조금이나마 필요한 부분에선 이 함수를 사용해서 이동했던 페이지들을 히스토리에서 삭제를 하는 것 |
| - | 요... | + | |
| 가끔 어떤 곳에서 로그아웃을 했더라구 뒤로가기 버튼을 클릭하면 이전 페이지가 나오는 것을 많이 목격하고 위 | 가끔 어떤 곳에서 로그아웃을 했더라구 뒤로가기 버튼을 클릭하면 이전 페이지가 나오는 것을 많이 목격하고 위 | ||
| 에 함수를 많이 사용하게 되었다. | 에 함수를 많이 사용하게 되었다. | ||
| - | 위 처럼 하면 로그 아웃 후에 뒤로가기 버튼을 눌러두 이전 페이지가 아닌 잴 처음 화면으로 가게 되지염. | + | 위 처럼 하면 로그 아웃 후에 뒤로가기 버튼을 눌러두 이전 페이지가 아닌 잴 처음 화면으로 가지. |
| ====스팸 봇이 여러분의 email주소를==== | ====스팸 봇이 여러분의 email주소를==== | ||
| 줄 1681: | 줄 1722: | ||
| PHP 확장자는 마음대로 변경 하여 사용할 수 있다. | PHP 확장자는 마음대로 변경 하여 사용할 수 있다. | ||
| - | 아래는 윈도우에서 httpd.conf 파일 이다. 물론 리눅스도 AddType 부분은 동일 | + | 아래는 윈도우에서 httpd.conf 파일 이다. 물론 리눅스도 AddType 부분은 동일. |
| + | |||
| + | < | ||
| LoadModule php4_module c:/ | LoadModule php4_module c:/ | ||
| AddType application/ | AddType application/ | ||
| + | </ | ||
| 위에 처럼 설정 하면 | 위에 처럼 설정 하면 | ||
| .tood .tgp .cal .html .htm .include 파일에서 PHP 를 사용할 수 있다. | .tood .tgp .cal .html .htm .include 파일에서 PHP 를 사용할 수 있다. | ||
| - | 확장자만 가지고는 이 사이트가 PHP 기반인지 알 수 없다. | ||
| - | 물론 알 수 있는 방법은 많죠..그러나 단지 접속 해 보고는 알 수 없다. | ||
| - | |||
| - | index.tgp 파일...이상하게 생각 할것 이다..이게 먼 확장자 이지? | ||
| + | 확장자만 가지고는 이 사이트가 PHP 기반인지 알 수 없다. | ||
| ====세션 보안 최적화 | ====세션 보안 최적화 | ||