Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Yoo, estava criando uma função de validação de parâmetros até que me veio na mente 2 duvidas, um momento antes estava programando em JS (JQuery) e estava usando um ponto a cada função ao invés de ; tipo: $(this).parent().find()... ; Ai fui testar no php, fiz assim:
/**
* Valida um parâmetro passado via URL ou enviado via POST
* @param $Input = INPUT_TYPE, 0 = Post, 1 = GET
* @param $Param = Nome do parâmetro
* @param $RegexValidate = if true usa preg_replace
* @return self::$Data
*/
public static function FilterParam($Input, $Param, $RegexValidate = false){
$RegexValidate = (int) $RegexValidate.
$Input = (int) $Input.
self::$Data = (string) filter_input($Input, $Param).
self::$Data = strip_tags(self::$Data).
self::$Data = trim(self::$Data).
self::$Data = strtolower(self::$Data);
return ($RegexValidate ? preg_replace('/[^A-Za-z0-9-]/', '', self::$Data) : self::$Data);
}
A primeira duvida é, a validação que fiz para filtrar um parâmetro basta ? poderia eu correr algum risco de SQL Injection ? Lembrando que meu htaccess está com uma regra similar.
A segunda é os pontos depois da definição da $Data, nunca tinha usado, sempre usei ; procurei algo sobre e não achei nada, se alguem souber algo a respeito, qualquer informação será bem-vinda, minha suposição é que um ponto soa como um ; :unsure:
Muito obrigado beraldo, pelo esclarecimento das duvidas, sobre o Prepared Statements eu já uso então acho que não corro riscos =D e obrigado novamente !
Se quer filtragem 100% eficiente contra SQL Injection, use Prepared Statements. Assim seu SGBD é quem fará o trabalho (e da forma correta).
Veja como fazer isso usando PDO:
http://rberaldo.com.br/pdo-mysql/
Sobre o ponto, está "errado".
Ponto é concatenação.
Veja:
$x = 5 .
$y = 7 .
$z = 9;
Isso vai gerar este erro:
>
PHP Parse error: syntax error, unexpected '$y' (T_VARIABLE) in /private/tmp/test.php on line 4
Parse error: syntax error, unexpected '$y' (T_VARIABLE) in /private/tmp/test.php on line 4
Por um simples motivo: não se concatena valores que não sejam strings.
Agora teste isto:
$x = 'abc' .
Você verá:
>
string(6) "abcdef"
A explicação é que $x recebe "abc" e mais o retorno desta atribuição:
$y = 'def';
Considerando que toda atribuição retorna o valor atribuíodo, $x vai receber "abcdef"
Por isso não faz sentido seu código.
Ele funciona, mas concatena tudo.
Veja:
$param = 'A B C <script>alert(var);</script>';
$param = strip_tags($param) .
Adivinha qual é a saída...
string(51) "A B C alert(var);a b c <script>alert(var);</script>"