내 웹사이트에는 여러 개의 CGI(컴파일된 실행 가능 바이너리에서 가져온 것)가 있습니다.씨만약을 대비해 소스)는 브라우저(예:
http://mydomain.com/cgi-bin/myprog.cgi )에서 실행할 때 잘 작동
하지만 myprog.cgi에 대한 심볼릭 링크를 cgi-bin/
cd cgi -bin/
ln - s myprog.cgi proglink.cgi 그런 다음
브라우저에서
http://mydomain.com/cgi-bin/proglink.cgi를 실행하려고 하면
500 오류가 발생합니다.
내 .htaccess에는
AddHandler cgi-script .cgi
Options +ExecCGI +FollowSymLinks -Indexes
(+FollowSymLinks 유무에 관계없이 +SymLinksIfOwnerMatch도 시도했지만) 작동하지 않는 것 같습니다.
편집하다사이트에 이미 수년간 잘 작동해온 .php 스크립트에 대한 심볼릭 링크가 있다는 점을 언급해야 합니다(아래 댓글의 제안에 대해 @slm에게 감사드립니다). (해당 PHP 스크립트는 $_SERVER['PHP_SELF']를 수행하여 심볼릭 링크의 이름을 반환하며 모두 문제 없이 작동합니다.) 그러나 이제 위에서 언급한 대로 실행 가능한 image.cgi에 대한 심볼릭 링크가 실패합니다.
또한 사이트가 공유 호스팅(저렴한 dreamhost.com 공유 호스팅)에 있다는 점도 언급해야 할 것 같습니다.
문제를 인터넷 검색해 보면 아무 것도 작동하지 않으며 Apache는 단순히 심볼릭 링크가 가리키는 CGI를 실행하지 않는다는 것을 나타냅니다. 인터넷 검색이 정확합니까, 아니면 심볼릭 링크 후에 cgi를 실행할 수 있는 방법이 있습니까? 그것이 맞지만 이 작업을 수행할 수 없는 경우 아래에서 이 작업을 수행하려는 이유를 설명하겠습니다. 그런 다음 동일한 일반적인 목적을 달성하고 효과가 있는 대체 전략을 생각해 낼 수 있기를 바랍니다. ..
...그러니까 이거야안전다음 라벨이 나타납니다. 이러한 CGI 중 일부는 내 사이트에 대한 DDoS 공격의 표적이 되었습니다(누군가가 내 사이트를 괴롭히는 이유를 신이 알고 있거나 모르더라도, 그것은 전혀 가치가 없습니다). 그래서 각 cgi에 코드를 추가하여(각 cgi의 코드는 거의 동일함) ?query_string을 검증하고 "공격 가능성" 점수를 할당했습니다. 점수가 작으면 cgi는 요청을 무시하고 점수가 크면 사용자의 ipaddr=getenv("REMOTE_ADDR")가 "deny from"과 함께 .htaccess에 자동으로 추가됩니다. 나에게 이메일을 보내 알려주는 등 다양한 중간 조치도 있습니다.
그래서 이것은 많은 코드 줄이 됩니다. 나는 각 CGI에 개별적으로 컴파일하는 대신 설정 후 잊어버리는 프런트엔드 쿼리 유효성 검사를 작성하고 싶었습니다(그리고 여전히 원합니다). 그런 다음 모든 것이 정상이면 system() 호출을 실행하여 요청된 cgi를 실행합니다. 그래서 나는 system() 호출을 발행하여 간접적으로 cgi를 실행하는 짧고 작은 테스트 프로그램을 작성했는데 제대로 작동했습니다.
이제 심볼릭 링크 문제가 발생하는 이유는 일반적으로 프런트엔드가 다양한 cgi를 실행할 수 있어야 하고 따라서 어떤 cgi를 실행할지 알아야 하기 때문입니다. 각 cgi 이름을 해당 프런트 엔드 cgi에 심볼릭 링크함으로써 getenv("SCRIPT_NAME")를 확인할 수 있으며, 이는 심볼릭 링크 이름을 제공하여 요청하는 특정 cgi를 식별합니다. PHP $_SERVER['PHP_SELF']와 약간 비슷합니다. 따라서 심볼릭 링크가 가장 깨끗하고 간단한 솔루션인 것 같습니다. 그러나 이것이 apache/.htaccess로 가능하지 않다면 동일한 결과를 얻을 수 있는 다른 방법을 제안해 주실 수 있습니까?