Como executar um cgi apontado por um symlink?

0

Meu site tem vários cgi's (binários executáveis compilados a partir de fontes C , caso isso seja importante) que funcionam bem quando executados em um navegador como, por exemplo,
 http://mydomain.com/cgi-bin/myprog.cgi
Mas se eu colocar um link simbólico para myprog.cgi em cgi-bin / like
 cd cgi-bin /
 ln -s myprog.cgi proglink.cgi
em seguida, tentando correr
 http://mydomain.com/cgi-bin/proglink.cgi
de um navegador gera um erro 500.

Meu .htaccess tem um  AddHandler cgi-script .cgi
 Opções + ExecCGI + FollowSymLinks -Indexes
(e também tentei o + SymLinksIfOwnerMatch, com e sem o + FollowSymLinks ao lado dele), mas isso parece não funcionar.

Editar Devo mencionar (graças à sugestão do @ slm nos comentários abaixo) que o site já possui links simbólicos para scripts .php, que têm funcionado bem durante anos. (Esses scripts php fazem um $ _SERVER ['PHP_SELF'], retornando o nome do symlink, e isso tudo funciona sem nenhum problema.) Mas agora o symlink para uma imagem executável .cgi falha como descrito acima.
Eu provavelmente também devo mencionar que este site está em um host compartilhado (cheaphosthost.com hosting compartilhado).

Pesquisando o problema parece sugerir que nada irá funcionar, e que o apache simplesmente não executará um cgi apontado por um symlink. Isso é direito googling, ou existe alguma maneira de executar cgi após um link simbólico? Se estiver certo, e eu não posso fazer isso de maneira alguma, deixem-me descrever abaixo porque eu quero fazê-lo, e espero que você possa sugerir uma estratégia alternativa que funcione e que alcance o mesmo propósito geral. ..

... Então é aí que entra a segurança Tag. Alguns desses cgi's foram alvo de ataques de ddos ao meu site (embora Deus saiba, ou talvez ele não saiba, porque alguém se incomodaria com o meu site, que não tem absolutamente nada de valor). Então eu adicionei algum código a cada cgi (praticamente o mesmo código para cada um) para validar sua query_string, e atribuí-la uma pontuação de "probabilidade de ataque". Com uma pequena pontuação, o cgi apenas ignora a requisição e, com uma pontuação maior, o ipaddr = getenv ("REMOTE_ADDR") do usuário é automaticamente anexado ao .htaccess com "deny from". E também várias ações intermediárias, como enviar-me um e-mail sobre a situação.

Então isso se tornou muitas linhas de código. E, em vez de compilá-lo individualmente em cada cgi, eu queria (e ainda quero) escrever uma validação de consulta de front-end que faça isso de uma vez por todas. Então, se tudo estiver bem, emite uma chamada system () para executar o cgi solicitado. Então eu escrevi um pequeno programa de teste que apenas indiretamente executa um cgi emitindo uma chamada system (), e isso de fato funciona bem.

A questão do symlink agora vem porque, no caso geral, o front end tem que ser capaz de rodar muitos cgi's diferentes, e portanto precisa saber qual cgi rodar. E ao simbolizar cada nome cgi para esse cgi de front-end, ele poderia analisar getenv ("SCRIPT_NAME"), que lhe daria o nome do link simbólico, identificando, assim, o cgi específico que emitia o pedido. Tipo como php $ _SERVER ['PHP_SELF']. Por isso, os links simbólicos parecem a solução mais simples e fácil. Mas se isso não for possível com o apache / .htaccess, você pode sugerir algum outro método para realizar o mesmo propósito?

    
por John Forkosh 14.07.2018 / 18:23

0 respostas