Проверяване на кодове

ventsi34

Registered
Здравейте, искам да се науча как да проверявам сайтовете, който създавам с PHP (поне основно) дали са надеждни говорим за MySQL инжектиране и XSS атаки. Моля ви дайте ми идей как да ги тествам.
 
Абе не се притеснявай няма какво да ти навредят. Ако използваш фунцията Mysql_query бъди спокоен. Единствено което могат да нарпрят хакерите при атака е да допълнаят някоя select заявка. Само да сложиш единични кавички ти е достъчно. Пример "
Код:
 where idAla = '5'
Това ти е достатъчно. Mysql_query - не може да изпълнява множествени заявки. Това какво означава . При дописване на допълнително условие към твоята заявка няма да се изпълни. Фактически не могат нито да ти изтрият запис или да ти изтрият базата. Ако използваш mysqli_query тогава вече е задължително да се ескйпваш. Не гледай тези глупави примери с хиляди проверки безполезни са !!!. Трябва т и само тази фунция strt и замстваш специялните символи. Само си правиш проверка ако е число да ти върне 0 ако е невалидно и ако е дата трябва да т ивърне 0000-00-00 а за стринг '' това е хак за mysql 5 да не гърми.
Тази фунция ти е достатъчна
Код:
function _sql($str) {
	return strtr($str, array(
		"\\" => "\\\\"
		, "'" => "\\'"
		, "\"" => "\\\""
		, "`" => "\\`"
		, "\t" => "\\t"
		, "\r" => "\\r"
		, "\n" => "\\n"
		, "\x00" => "\\0"
		, "\x1A" => "\\Z")
	);
}
//Начин на използване
/*
$sql = "select 8 from ala where idAla ='"._sql($_POST["id"])."';
$qsql = "insert into ala set idAla = '"._sql($_POST["id"])."'
*/
 
Прочетох доста за MySQL инжекциите и за XSS. Но ако може някой да напише кодове или начини за предпазване от кражби на сесия и CSRF.
 
Значи когато имаш $_POST променливи винаги ги филтрирай със htmlspecialchars. Това почти спира XSS атаките.
А за sql injection. При зимане на променлива $_GET трябва да промеряваш за позволени символи (с preg_match)
 
slideR каза:
Значи когато имаш $_POST променливи винаги ги филтрирай със htmlspecialchars. Това почти спира XSS атаките.
А за sql injection. При зимане на променлива $_GET трябва да промеряваш за позволени символи (с preg_match)
Не с preg_match, ако е число му сложи само (int) от пред и провери дали е по голямо от 0, ако не е число има други трикове, за да провериш дали съвпада с това от DB.


Виж това за предпазване- http://web-tourist.net/login/login/view.php?st=2014
 
Karcho каза:
slideR каза:
Значи когато имаш $_POST променливи винаги ги филтрирай със htmlspecialchars. Това почти спира XSS атаките.
А за sql injection. При зимане на променлива $_GET трябва да промеряваш за позволени символи (с preg_match)
Не с preg_match, ако е число му сложи само (int) от пред и провери дали е по голямо от 0, ако не е число има други трикове, за да провериш дали съвпада с това от DB.


Виж това за предпазване- http://web-tourist.net/login/login/view.php?st=2014
Ами ако не е число какво прави. Абе ето ти една защитка за xss или по точно на $_GET променливите.
$simbols = array("\/", "\'", """, "\.", "\<", "\>");
foreach($simbols as $simbol)
{
foreach($_GET as $get)
{
if(preg_match("/{$simbol}/", $get))
{
die("You use unknown simbols.");
}
}
}
Най-добре я сложи някаде в конфигурационния ти файл
 
@slideR - htmlspecialchars се използва когато се подавт данните към лейаута , насякъде другаде даните са в сурво вид. @ventsi34 Фунцията която съм наммисал се гриже за всичко не ти трябват повече кодове. За кражба ансесията има 3 варианта. Най- сигорно е да ползваш сесйни бизквитки или където използва шсесии да си пускаш SSL. Относно CSRF уязвимостите: желателно е да изполваш POST метод за изпращането на данни (не че той не може да се подрави)
 

Back
Горе