|
|
|
| Допустим есть массив с запрещенными словами и символами
<?php
$badchars = array(";","'","*","/"," \ ","DROP", "SELECT", "UPDATE", "DELETE", "WHERE", "drop", "select", "update", "delete", "where", "-1", "-2", "-3","-4", "-5", "-6", "-7", "-8", "-9", "distinct", "having", "truncate", "replace", "handler", "like", "procedure", "limit", "order by", "group by");
|
Как можно создать проверку GET'a через этот массив? | |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2010 в 10:18)
| |
<?php
if (in_array($_GET["char"], $badchars)) {
echo "это запрещенное слово/символ";
} else {
echo "это НЕ запрещенное слово/символ";
}
|
| |
|
|
|
|
|
|
|
для: psychomc
(30.07.2010 в 10:52)
| | Это на определенную переменную, нельзя сделать так, чтобы он всегда искал запрещенные символы
<?php
if (in_array($_GET["чтобы сюда проходили каждые переменные по гету"], $badchars)) {
echo "это запрещенное слово/символ";
} else {
echo "это НЕ запрещенное слово/символ";
}
|
| |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2010 в 10:18)
| | Через array_map, только непонятно, зачем это все? | |
|
|
|
|
|
|
|
для: neadekvat
(30.07.2010 в 11:00)
| | Дополнительная проверка на символы, от sql инъекций | |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2010 в 11:08)
| | Так может стоит сосредоточится на самих узких местах: запросы, подключения файлов и т.д.? | |
|
|
|
|
|
|
|
для: neadekvat
(30.07.2010 в 11:14)
| | Помойму так проще, проверил GET один раз и все, не надо в каждом подключении, что-то проверять | |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2010 в 11:23)
| | Ну делайте, делайте.. | |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2010 в 11:23)
| | м-да...
может тогда проще уже прогнать весь $_GET через mysql_real_escape_string или (int) / intval
в зависимости от ожидаемого значения? | |
|
|
|
|
|
|
|
для: psychomc
(30.07.2010 в 11:54)
| | Да дело в том, что база не MySql, а MSSQL, эти функции не помогут
Хотя (int) должен помочь) хм | |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2010 в 12:08)
| | Почему не помогут? | |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2010 в 12:08)
| | а разве синтаксис запросов отличается? | |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2010 в 10:18)
| | Вы занимаетесь фигнёй.
Почитайте | |
|
|
|
|
|
|
|
для: bishake
(30.07.2010 в 12:10)
| | Хорошая статья спасибо, но почти все мне это было известно уже, у меня и так поля все прег матчем заделаны. Я бы хотел помощи, помогите разобраться с этой функцией, как она работает?
<?PHP
function check_inject()
{
$badchars = array(";","'","*","/"," \ ","DROP", "SELECT", "UPDATE", "DELETE", "WHERE", "drop", "select", "update", "delete", "where", "-1", "-2", "-3","-4", "-5", "-6", "-7", "-8", "-9", "distinct", "having", "truncate", "replace", "handler", "like", "procedure", "limit", "order by", "group by");
foreach($_POST as $value)
{
$value = clean_variable($value);
if(in_array($value, $badchars))
{
die("<b><font color=red>SQL Injection Detected - Make sure only to use letters and numbers!</font>\n<br>\nIP: ".$_SERVER['REMOTE_ADDR']."</b>");
}
else
{
$check = preg_split("//", $value, -1, PREG_SPLIT_OFFSET_CAPTURE);
foreach($check as $char)
{
if(in_array($char, $badchars))
{
die("<b><font color=red>SQL Injection Detected - Make sure only to use letters and numbers!</font>\n<br>\nIP: ".$_SERVER['REMOTE_ADDR']."</b>");
}
}
}
}
}
function clean_variable($var) {
$newvar = preg_replace('/[^a-zA-Z0-9\_\-]/', '', $var);
return $newvar;
}
check_inject();
// Clean Var Edited
function clean_var($var) {
$var = stripslashes($var);
$rules = '/[^a-zA-Z0-9-\_\=\@\.\,\:\/\^\+\!\~\[\]\*\{\}\(\)\|\\\ ]/';
if(@preg_match($rules,$var) || $var==NULL) { } //If isset ErroR
$newvar = @preg_replace($rules,'',$var);
$newvar = str_replace(" ","",$newvar);
$newvar = str_replace("\n","",$newvar);
$newvar = str_replace("\0","",$newvar);
$newvar = str_replace("'","'",$newvar);
return $newvar;
}
// Onter Anti-SQL Injection
function xw_sanitycheck($str){
if(strpos(str_replace("''","","$str"),"'")!=false)
return str_replace("'", "''",$str);
else
return $str;
}
function secure($str){
// Case of an array
if (is_array($str)) {
foreach($str AS $id => $value) {
$str[$id] = secure($value);
}
}
else
$str = xw_sanitycheck($str);
return $str;
}
// Get Filter
$xweb_AI = array_keys($_GET);
$i=0;
while($i<count($xweb_AI)) {
$_GET[$xweb_AI[$i]]=secure($_GET[$xweb_AI[$i]]);
$i++;
}
unset($xweb_AI);
// Request Filter
$xweb_AI = array_keys($_REQUEST);
$i=0;
while($i<count($xweb_AI)) {
$_REQUEST[$xweb_AI[$i]]=secure($_REQUEST[$xweb_AI[$i]]);
$i++;
}
unset($xweb_AI);
// Post Filter
$xweb_AI = array_keys($_POST);
$i=0;
while($i<count($xweb_AI)) {
$_POST[$xweb_AI[$i]]=secure($_POST[$xweb_AI[$i]]);
$i++;
}
// Cookie Filter (do we have a login system?)
$xweb_AI = array_keys($_COOKIE);
$i=0;
while($i<count($xweb_AI)) {
$_COOKIE[$xweb_AI[$i]]=secure($_COOKIE[$xweb_AI[$i]]);
$i++;
}
// End
?>
|
| |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2010 в 13:09)
| | Да хер его знает, как она работает! Потому что невозможно даже увидеть ее. Сколько раз просили - используйте переносы строк для длинных кусков. Что теперь с этим скроллингом делать? | |
|
|
|
|
|
|
|
для: neadekvat
(30.07.2010 в 13:22)
| | В Опере есть хорошая штука "Подогнать по ширине" называется. Нажал кнопочку и весь контент виден в пределах экрана.
Но это так, мысли в слух. :) | |
|
|
|
|
|
|
|
для: Drago
(30.07.2010 в 13:46)
| | Да ладно, есть такая вещь хорошая - широкоформатные мониторы
Но это не отменяет необходимости укорачивать строки | |
|
|
|
|