Aconteceu que, no ano passado, tive que lidar com suporte técnico para hospedagem, bem como suporte para sites com os quais tenho um relacionamento bastante indireto. E como os administradores geralmente enfrentam todos os tipos de ataques em seus sites, sem ter a oportunidade de contratar um especialista, ocorreu-me encontrar uma solução única e universal para todos os sites que os ajudaria a proteger seu site sem muito esforço. E, embora ainda existam muitos desvantagens e nuances que ainda não consegui resolver, essa é a única solução no momento que permite proteger o site por dentro, sem recorrer a todos os tipos de plug-ins e módulos que precisam ser instalados externamente e que até desenvolvedor de site inexperiente é capaz de instalar e configurar em seu site. A essência desta solução é processar os dados transmitidos pelos métodos GET, POST e / ou COOKIE, mesmo antes de serem processados e gravados diretamente no banco de dados.
Neste artigo, darei exemplos do uso e das desvantagens de um método específico.
Aqui está o próprio código
$jsxss="onabort,oncanplay,oncanplaythrough,ondurationchange,onemptied,onended,onerror,onloadeddata,onloadedmetadata,onloadstart,onpause,onplay,onplaying,onprogress,onratechange,onseeked,onseeking,onstalled,onsuspend,ontimeupdate,onvolumechange,onwaiting,oncopy,oncut,onpaste,ondrag,ondragend,ondragenter,ondragleave,ondragover,ondragstart,ondrop,onblur,onfocus,onfocusin,onfocusout,onchange,oninput,oninvalid,onreset,onsearch,onselect,onsubmit,onabort,onbeforeunload,onerror,onhashchange,onload,onpageshow,onpagehide,onresize,onscroll,onunload,onkeydown,onkeypress,onkeyup,altKey,ctrlKey,shiftKey,metaKey,key,keyCode,which,charCode,location,onclick,ondblclick,oncontextmenu,onmouseover,onmouseenter,onmouseout,onmouseleave,onmouseup,onmousemove,onwheel,altKey,ctrlKey,shiftKey,metaKey,button,buttons,which,clientX,clientY,detail,relatedTarget,screenX,screenY,deltaX,deltaY,deltaZ,deltaMode,animationstart,animationend,animationiteration,animationName,elapsedTime,propertyName,elapsedTime,transitionend,onerror,onmessage,onopen,ononline,onoffline,onstorage,onshow,ontoggle,onpopstate,ontouchstart,ontouchmove,ontouchend,ontouchcancel,persisted,javascript"; $jsxss = explode(",",$jsxss); foreach($_GET as $k=>$v) { if(is_array($v)) { foreach($v as $Kk=>$Vv) { $Vv = preg_replace ( "'<script[^>]*?>.*?</script>'si", "", $Vv ); $Vv = str_replace($jsxss,"",$Vv); $Vv = str_replace (array("*","\\"), "", $Vv ); $Vv = strip_tags($Vv); $Vv = htmlentities($Vv, ENT_QUOTES, "UTF-8"); $Vv = htmlspecialchars($Vv, ENT_QUOTES); $_GET[$k][$Kk] = $Vv; } } ELSE {
O exemplo acima lida apenas com solicitações GET. Portanto, o loop precisa ser repetido com pelo menos POST e COOKIE. Infelizmente, não pude executar esta solução recursivamente na função e passar todas as matrizes $ _GET, $ _POST e $ _COOKIE que precisávamos ao mesmo tempo. E o mais importante que não foi possível realizar foi uma travessia recursiva de matrizes multidimensionais desse tipo, associada à peculiaridade da transferência de dados dentro da função, bem como ao uso limitado de variáveis variáveis.
1) $ v = preg_replace ("'<script [^>] *?>. *? ' Si", "", $ v);
Aqui nós removemos o código javascript explicitamente desnecessário. Uma função pode se tornar supérflua se você ainda permitir que você passe diretamente o próprio código, não para sua execução, mas para familiarização. Por exemplo, nos fóruns.
2) $ v = str_replace ($ jsxss, "", $ v);A função é semelhante à primeira, mas neste caso eliminamos eventos que podem ser usados para ataques xss. Você pode modificar levemente essa solução e cortar não apenas o evento em si, mas também o conteúdo que eles estão tentando anexar a ele. Mas ainda não vi a necessidade disso
3) $ v = str_replace (matriz ("*", "\\"), "", $ v);E esses caracteres nocivos, especialmente a barra invertida, podem fazer com que seu SQL seja invadido. Como o símbolo em si é usado muito raramente e seu perigo potencial é bastante alto, decidi destruí-lo pela raiz.
4) $ v = mysql_real_escape_string ($ v);O uso desta função pode causar escape desnecessário de caracteres, porque provavelmente já é usado diretamente ao gravar dados no banco de dados, mas, por outro lado, ajudará a proteger-se da injeção de sql e a proteger seus dados como nenhum outro. Ao usá-lo, você deve usar a função após conectar-se ao banco de dados. Além disso, não vamos esquecer que o mysql_real_escape_string não é usado no php 7, e o próprio uso de tais funções depende do método de conexão. Por exemplo, ao conectar-se ao banco de dados via mysqli, você pode precisar usar a função mysqli_real_escape_string.
5) $ v = strip_tags ($ v);Strip_tags ajudará a remover todas as tags desnecessárias. Infelizmente, os necessários também. O segundo parâmetro, você pode especificar as tags que deseja deixar. Mas o problema é que existem tantas tags necessárias que listá-las é bastante problemática e, mais lamentável, também existem tags adicionadas por desenvolvedores de sites por conta própria para criar determinadas funções no site. Obviamente, seria muito mais conveniente especificar as tags que precisam ser removidas e não deixadas. Mas nos contentaremos com o que temos. Além disso, expressões regulares podem ser usadas para essas decisões.
6) $ v = htmlentities ($ v, ENT_QUOTES, "UTF-8");
7) $ v = htmlspecialchars ($ v, ENT_QUOTES);Eu acho que essas duas funções não precisam ser apresentadas e uma é semelhante à outra, por isso é suficiente usar uma delas. No entanto, eles estão longe de ser sempre adequados.
No momento, foi tudo o que consegui coletar. Se alguém tiver algo para complementar este artigo, ficarei feliz em;)
PS Para quem deseja uma solução e oferece o uso de DOP, mecanismos de modelo, diferentes módulos de servidor, etc. Não nego de forma alguma que esta solução tenha suas desvantagens, e em algum lugar distorcerá a conclusão e pode até afetar a funcionalidade, para a qual escrevi no início do post que a solução tem suas desvantagens.
Esta publicação não é para programadores, é para administradores de sites que não têm conhecimento e experiência para alterar o código por dentro. Para quem não quer, ou não pode, pagar pela conclusão dos sites. O que geralmente acontece quando um desenvolvedor torna os sites mais baratos em alguns CMS baratos e geralmente totalmente gratuitos.
E para impedir que isso aconteça, você precisa desenvolver seus sites em CMS confiável e confiável, com suporte técnico de alta qualidade. O CMS mais adequado e funcional para o desenvolvimento de tais projetos é o Bitrix. Encomendando conosco em
https: // wazzup . Hospedagem e Licença Bitrix, estamos prontos para configurar e instalar a loja gratuitamente.
Além disso, observe que temos uma oferta especial para a compra de uma licença Bitrix; até 6 meses de hospedagem são gratuitos.
Nossos clientes escolhem o Bitrix, pois este é o único maior sistema de gerenciamento de sites da Federação Russa com um enorme sistema de suporte técnico e poderosa funcionalidade. A confiabilidade do Bitrix é determinada não apenas pelo tempo, mas também pelo constante suporte técnico qualificado dos programadores, em contraste com o CMS gratuito e barato, cujo desenvolvimento e suporte são realizados por constantes entusiastas, sem muita experiência.