Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Firewall{
- public function __construct() {
- // O isset elimina a necessidade da supressão de erros(@)
- // Invertendo a condição elimina a necessidade de um if vazio
- if(isset($_POST['firewall']) and $_POST['firewall'] != 'cancelar') {
- if ($_POST) {
- $this->post();
- } else if ($_GET) {
- $this->get();
- }
- }
- }
- // Definindo visibilidade para todos os métodos (boa prática)
- public function post() {
- // aqui provavelmente poderíamos trocar esses loops aninhados por algo como um array_map, eliminando o else
- foreach ($_POST as $chave => $valor){
- if(is_array($valor)) {
- foreach ($valor as $chave2 => $valor2) {
- $_POST[$chave2] = $this->antiInjection($valor2);
- }
- } else {
- $_POST[$chave] = $this->antiInjection($valor);
- }
- }
- return;
- }
- public function get() {
- foreach ($_GET as $chave => $valor){
- if(is_array($valor)){
- foreach ($valor as $chave2 => $valor2){
- $_POST[$chave2] = $this->antiInjection($valor2);
- }
- }
- else { $_GET[$chave] = $this->antiInjection($valor);
- }
- }
- return;
- }
- public function antiInjection($valor) {
- /* Algumas colocações:
- * 1 - esqueça a linha do preg_replace. Ela se baseia em blacklist e não é uma boa idéia.
- * 2 - Para prevenir SQL Injection a melhor saída é usar um prepared statemant (via PDO, por exemplo)
- * 3 - Seria nesse método que usaríamos a filter
- */
- $valor = preg_replace("/(from|select|insert|delete|where|drop table|show tables|show databases|describe|left join|right join|inner join|#|\*|--|\\\\)/i", "", $valor);
- $valor = trim($valor);
- $valor = strip_tags($valor);
- $valor = addslashes($valor);
- return $valor;
- }
- }
- $fw = new Firewall();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement