Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Os campos de seleção suspensos são vulneráveis ​​a qualquer tipo de injeção


Cada elemento em um site pode ser alterado por um usuário malicioso (campos ocultos, divs, estilos, chamadas ajax, você escolhe...).

Dito isto, se você já estiver usando instruções preparadas, você não deve se preocupar muito com SQL Injection porque o mysql já sabe quais instruções serão executadas.

Em vez disso, você deve limpar toda a saída que está sendo renderizada em um site.

Digamos que no seu formulário, você está perguntando em que país eu moro dessa maneira:
 <select name="country">
     <option value="Mexico">Mexico</option>
     <option value="USA">USA</option>
     <option value="Canada">Canada</option>
 </select>

mas sou um usuário mal-intencionado e uso o inspetor de código do Chrome para alterar seu HTML e seleciono México, mas altero seu valor para

<script type="text/javascript">alert("Hello World");</script>

e se você gerar esse valor em outra página desta maneira:
 Your country is: <?=$country?>

Então você estará escrevendo:
 Your country is:
 <script type="text/javascript">alert("Hello World")</script>

e uma caixa de alerta aparecerá com o texto "Hello World"

Que mal posso fazer com que você se pergunte...

bem, eu posso fazer o que quiser com isso, posso roubar cookies ou se esse valor for público (digamos que você está exibindo esse valor em sua página inicial), então eu poderia redirecionar seus usuários para outro site, alterar o conteúdo do seu site .. ... o que eu quiser.

Para limpar a saída de seus usuários, você pode usar

htmlentities

Isso converterá, por exemplo, o &lt; > símbolos ao seu respectivo código:&lt; e &gt