V
Vadik(R)
Недавно стал изучать MySQL. Стал создавать БД, таблицы и т.д. думал очень удобно пользоваться этим при создании сайта. Но где-то читал о том, что могут быть SQL-инъекции и вообщем использование БД будет небезопасно. Честно говоря, так и не понял как хакеры все это взламывают, но вот хотел спросить: Будет ли безопасно, если я заменю код с проверкой на код без проверки?
Код с проверкой:[codebox]function letterexist($letter) {
return ($letter=="0" || $letter=="A" || $letter=="B" || $letter=="C" || $letter=="D" || $letter=="E" ||
$letter=="F" || $letter=="G" || $letter=="H" || $letter=="I" || $letter=="J" || $letter=="K" ||
$letter=="L" || $letter=="M" || $letter=="N" || $letter=="O" || $letter=="P" || $letter=="Q" ||
$letter=="R" || $letter=="S" || $letter=="T" || $letter=="U" || $letter=="V" || $letter=="W" ||
$letter=="X" || $letter=="Y" || $letter=="Z" || $letter=="А" || $letter=="Б" || $letter=="В" ||
$letter=="Г" || $letter=="Д" || $letter=="Е" || $letter=="Ж" || $letter=="З" || $letter=="И" ||
$letter=="К" || $letter=="Л" || $letter=="М" || $letter=="Н" || $letter=="О" || $letter=="П" ||
$letter=="Р" || $letter=="С" || $letter=="Т" || $letter=="У" || $letter=="Ф" || $letter=="Х" ||
$letter=="Ц" || $letter=="Ч" || $letter=="Ш" || $letter=="Щ" || $letter=="Э" || $letter=="Ю" ||
$letter=="Я");
}
function pageexist($letter, $page) {
$res=mysql_query("SELECT * FROM Additional WHERE aKey='".$letter."'");
while($row=mysql_fetch_array($res)) {
$count=$row[count];
}
for ($i=1; $i<=$count; $i++) {
if (($i-1-($i-1)%10)/10+1==$page) {
return true;
}
}
return false;
}
?>
<?php
if (letterexist($_GET['letter']) && pageexist($_GET['letter'], $_GET['page'])) {
$letter=$_GET['letter'];
$x=$_GET['page'];
$res=mysql_query("SELECT * FROM Additional WHERE aKey='".$letter."'");
while($row=mysql_fetch_array($res)) {
$n=$row[count];
}
$res=mysql_query("SELECT * FROM Clips WHERE aKey='".$letter."' AND desyat='".$x."'");
while($row=mysql_fetch_array($res)) {
$author=$row[author];
$track=$row[track];
$size=$row[size];
$extension=$row[extension];
$resolution=$row[resolution];
$duration=$row[duration];
$link=$row[link];
$imgsrc=$row[imgsrc];
if (!$flag) {
$flag=1;
} else {
echo "<hr>\n";
}
writeContent($author, $track, $size, $extension, $resolution, $duration, $link, $imgsrc);
}
}
?>[/codebox]
Код без проверки: [codebox]$letter=$_GET['letter'];
$x=$_GET['page'];
$res=mysql_query("SELECT * FROM Additional WHERE aKey='".$letter."'");
while($row=mysql_fetch_array($res)) {
$n=$row[count];
}
$res=mysql_query("SELECT * FROM Clips WHERE aKey='".$letter."' AND desyat='".$x."'");
while($row=mysql_fetch_array($res)) {
$author=$row[author];
$track=$row[track];
$size=$row[size];
$extension=$row[extension];
$resolution=$row[resolution];
$duration=$row[duration];
$link=$row[link];
$imgsrc=$row[imgsrc];
if (!$flag) {
$flag=1;
} else {
echo "<hr>\n";
}
writeContent($author, $track, $size, $extension, $resolution, $duration, $link, $imgsrc);
}[/codebox]?
Или хакер как-то может использовать то, что я уберу проверку и послать значение одной из переменных с кавычками, что приведет к неправильным выполнениям SQL-запросов?
Код с проверкой:[codebox]function letterexist($letter) {
return ($letter=="0" || $letter=="A" || $letter=="B" || $letter=="C" || $letter=="D" || $letter=="E" ||
$letter=="F" || $letter=="G" || $letter=="H" || $letter=="I" || $letter=="J" || $letter=="K" ||
$letter=="L" || $letter=="M" || $letter=="N" || $letter=="O" || $letter=="P" || $letter=="Q" ||
$letter=="R" || $letter=="S" || $letter=="T" || $letter=="U" || $letter=="V" || $letter=="W" ||
$letter=="X" || $letter=="Y" || $letter=="Z" || $letter=="А" || $letter=="Б" || $letter=="В" ||
$letter=="Г" || $letter=="Д" || $letter=="Е" || $letter=="Ж" || $letter=="З" || $letter=="И" ||
$letter=="К" || $letter=="Л" || $letter=="М" || $letter=="Н" || $letter=="О" || $letter=="П" ||
$letter=="Р" || $letter=="С" || $letter=="Т" || $letter=="У" || $letter=="Ф" || $letter=="Х" ||
$letter=="Ц" || $letter=="Ч" || $letter=="Ш" || $letter=="Щ" || $letter=="Э" || $letter=="Ю" ||
$letter=="Я");
}
function pageexist($letter, $page) {
$res=mysql_query("SELECT * FROM Additional WHERE aKey='".$letter."'");
while($row=mysql_fetch_array($res)) {
$count=$row[count];
}
for ($i=1; $i<=$count; $i++) {
if (($i-1-($i-1)%10)/10+1==$page) {
return true;
}
}
return false;
}
?>
<?php
if (letterexist($_GET['letter']) && pageexist($_GET['letter'], $_GET['page'])) {
$letter=$_GET['letter'];
$x=$_GET['page'];
$res=mysql_query("SELECT * FROM Additional WHERE aKey='".$letter."'");
while($row=mysql_fetch_array($res)) {
$n=$row[count];
}
$res=mysql_query("SELECT * FROM Clips WHERE aKey='".$letter."' AND desyat='".$x."'");
while($row=mysql_fetch_array($res)) {
$author=$row[author];
$track=$row[track];
$size=$row[size];
$extension=$row[extension];
$resolution=$row[resolution];
$duration=$row[duration];
$link=$row[link];
$imgsrc=$row[imgsrc];
if (!$flag) {
$flag=1;
} else {
echo "<hr>\n";
}
writeContent($author, $track, $size, $extension, $resolution, $duration, $link, $imgsrc);
}
}
?>[/codebox]
Код без проверки: [codebox]$letter=$_GET['letter'];
$x=$_GET['page'];
$res=mysql_query("SELECT * FROM Additional WHERE aKey='".$letter."'");
while($row=mysql_fetch_array($res)) {
$n=$row[count];
}
$res=mysql_query("SELECT * FROM Clips WHERE aKey='".$letter."' AND desyat='".$x."'");
while($row=mysql_fetch_array($res)) {
$author=$row[author];
$track=$row[track];
$size=$row[size];
$extension=$row[extension];
$resolution=$row[resolution];
$duration=$row[duration];
$link=$row[link];
$imgsrc=$row[imgsrc];
if (!$flag) {
$flag=1;
} else {
echo "<hr>\n";
}
writeContent($author, $track, $size, $extension, $resolution, $duration, $link, $imgsrc);
}[/codebox]?
Или хакер как-то может использовать то, что я уберу проверку и послать значение одной из переменных с кавычками, что приведет к неправильным выполнениям SQL-запросов?