Discutiremos os perigos da saída não higienizada e forneceremos uma maneira segura de exibir a saída formatada.
Não há perigo de filtrar a saída
Se você apenas obtiver a entrada do usuário e exibi-la, poderá quebrar sua página de saída, por exemplo, alguém pode incorporar javascript maliciosamente na caixa de entrada enviada:
This is my comment
<script language="javascript:
alert ('Do Something Bad. aqui!')">.
Dessa forma, mesmo que o usuário não seja mal-intencionado, algumas de suas instruções HTML serão danificadas, como uma tabela sendo interrompida repentinamente ou a página sendo exibida de forma incompleta.
Mostrar apenas texto não formatado
Esta é a solução mais simples, basta exibir as informações enviadas pelo usuário como texto não formatado. Use a função htmlspecialchars() para converter todos os caracteres em codificação HTML.
Por exemplo, <b> será convertido em <b>, o que garante que nenhuma tag HTML inesperada será exibida em momentos inadequados.
Esta é uma boa solução se seus usuários se preocupam apenas com conteúdo de texto não formatado. Mas seria melhor se você desse alguma capacidade de formatação.
Formatando com
tags de marcação personalizadas Tags do próprio usuário para formatação
Você pode fornecer tags especiais para uso dos usuários. Por exemplo, você pode permitir o uso de [b]...[/b] para enfatizar a exibição, [i].. .[/i ] Exibição em itálico, basta fazer uma operação simples de pesquisa e substituição: $output = str_replace("[b]", "<b>",
$output = str_replace("[i]", " <i >", $output);
Melhor ainda, podemos permitir que o usuário digite alguns links. Por exemplo, o usuário poderá inserir [link="url"]...[/link], que converteremos em uma instrução <a href="">...</a>
neste momento
., não podemos usar uma pesquisa simples A substituição deve ser feita usando expressões regulares:
$output = ereg_replace('[link="([[:graph:]]+)"]', '<a href="1">' , $output);
A execução de ereg_replace() é
encontrar a string onde [link="..."] aparece e substituí-la por <a href="...">
[[:graph:]] significa qualquer. caractere não vazio Consulte artigos relacionados para expressões regulares.
A função format_output() em outputlib.php fornece a conversão dessas tags. O princípio geral é: China Network Management Alliance bitsCN.com
chama htmlspecialchars() para converter tags HTML em codificações especiais, filtrar tags HTML que não devem ser exibidas. e, em seguida, converta uma série de nossas tags personalizadas em tags HTML correspondentes.
Por favor, veja o código fonte abaixo:
<?php
função formato_saída($saída) {
/****************************************** **********************************
* Pega uma string bruta ($output) e a formata para saída usando um método especial
* marcação simplificada que é semelhante ao HTML
************************************************** *******************************/
$saída = htmlspecialchars(stripslashes($saída));
/* novo parágrafo */
$saída = str_replace('[p]', '<p>', $saída);
/* audacioso */
$saída = str_replace('[b]', '<b>', $saída);
$saída = str_replace('[/b]', '</b>', $saída);
/* itálico */
$saída = str_replace('[i]', '<i>', $saída);
$output = str_replace('[/i]', '</i>', $output);Gerenciamento de rede bitscn_com
/* formatado */
$saída = str_replace('[pré]', '<pré>', $saída);
$saída = str_replace('[/pre]', '</pre>', $saída);
/* blocos recuados (blockquote) */
$output = str_replace('[indent]', '<blockquote>', $output);
$saída = str_replace('[/indent]', '</blockquote>', $saída);
/* âncoras */
$output = ereg_replace('[anchor="([[:graph:]]+)"]', '<a name="1"></a>', $output);
/* links, observe que tentamos evitar javascript nos links */
$saída = str_replace('[link="javascript', '[link="javascript', $saída);
$saída = ereg_replace('[link="([[:graph:]]+)"]', '<a href="1">', $saída);
$saída = str_replace('[/link]', '</a>', $saída);
return nl2br($saída);
}
?>
Algumas notas:
Lembre-se de substituir a tag personalizada para gerar a string da tag HTML após chamar a função htmlspecialchars(), não antes desta chamada, caso contrário, seu trabalho árduo será desperdiçado após chamar o fluxo htmlspecialchars().
Após
a conversãodo gerenciamento de rede bitscn_com
, o código HTML de pesquisa será substituído. Por exemplo, as aspas duplas "se tornarão".A função nl2br() converte os caracteres de retorno de carro e alimentação de linha em tags <br>, que também devem ser convertidas. estar depois de htmlspecialchars().
Ao converter [links=""] para <a href="">, você deve se certificar de que o remetente não inserirá javascript. Uma maneira simples de alterar [link="javascript para [link=" javascript, desta forma não. substituição, basta exibir o código original.
outputlib.php
chama test.php no navegador Você pode ver o uso de format_output().
A tag HTML normal não pode ser usada
.
- isto é [i]itálico[/i]
- este é [link=" http://www.phpbuilder.com"]um link[/link]
- esta é [anchor="test"]uma âncora e um [link="#test"]link[/link] para a âncora
[p]parágrafo
[pré]Pré-formatado[/pre]
[indent]Texto entrelaçado[/indent]
Claro
, você pode adicionar mais tags de acordo com suas necessidades. BitCN@com
ConclusãoEsta
discussão fornece um método para exibir com segurança a entrada do usuário, o que pode ser feito
.ser usado no
quadro de mensagens, os usuários sugerem anúncios do sistema
nos seguintes programas
Sistema BBS