2012-02-11 12 views
0

次のコードはSQLが脆弱であり、セキュリティを確保するための助けが必要です。私はPHPまたはMySQLのウィザードではありません。コードは年末にInfactは脆弱 であることをPHPのページネーションSQLセキュリティ

私の周りを検索し、MySQLの実際のエスケープ文字列などを行うには、いくつかの非常に有用なものを見たが、実装された場合、それはちょうど白ページを引き起こし

if(!isset($_GET['pg'])) { $page = 1; } else { $page = $_GET['pg']; } 
    $select = (($page * 20) - 20); 
$mysql_result = mysql_query("SELECT `id` FROM `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` WHERE ".implode(" AND ", $mysql_where)." ORDER BY id ASC LIMIT $select, 20") or die(mysql_error()); 

<? 
$servers = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM data_servers"),0); 
$pages = ceil($servers/20); 

if(!isset($_GET['pg'])) { $page = 1; } else { $page = $_GET['pg']; } 

if($page > 1) 
{ 
$prev = ($page - 1); 
echo "<a href='?pg=$prev'>[Inapoi]</a> "; 
} 

for($show = 1; $show <= $pages; $show++) 
{ 
if(($page) == $show) 
{ 
echo $show; 
} 
else 
{ 
echo " <a href='?pg=$show'>[$show]</a> "; 
} 
} 

if($page < $pages) 
{ 
$next = ($page + 1); 
echo " <a href='?pg=$next'>[Next]</a> "; 
} 
?> 

ている証明あなたのURLだけでPG = mysqlの

? を追加し、MySQLの構文エラーに

+0

通常、コードのすべての入力、特に$ _GET ['pg']の値をチェックする必要があります。SQLの場合でも、コードの他の部分に渡す前に入力の型と値をチェックするだけです関連しているかどうか。 – Stan

+0

次のようにadd_slashes、mysql_escape_string、mysql_real_escape_stringを使用するか、preg_matchを実行する必要がありますか? – C0nw0nk

+1

単純な修正はis_numeric($ pg)にチェックを入れてデフォルト値(1)エスケープデータを使用することですクエリを実行します。 –

答えて

1

コーディングPHPのセキュリティ面を学んでいたとき、彼らは私を助けたが、あなたがそれが数値でない場合は数値でない場合は0に評価されます(たとえば、文字列の場合など)。

私は念のために、いくつかのコントロールを追加するために、とにかくお勧めしたい:あなたは$pageは整数を保持していることを確認している。このように

if(!isset($_GET['pg']) || !is_numeric($_GET['pg'])) { $page = 1; } else { $page = (int) $_GET['pg']; } 

この場合、エスケープ機能は必要ありませんが、他の$_GETまたは$_POST変数を直接使用している場合は、それを考慮する必要があります。

+0

ありがとうございましたEntropyがうまくやっているようですが、私は試しましたか?pg = mysqlと構文エラーはありません。mysqlの注入をテストする他の方法があるかどうかわかりません。しかし、あなたのコードは仕事をうまくやっているようです:) – C0nw0nk

+0

'$ _GET ['pg']'を通って渡されたすべての種類の文字列は数値に変換されるので、このような方法でmysqlを入力することはできません。 もしあなたが助けてくれれば、以下のことを忘れないでください:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work;) – entropid

+0

そうでなければ、私は何をしますか?pg = 0 – C0nw0nk

0

を受けるべき私は、これらのリンクをチェックアウトし、慎重にそれらを読んで、彼らがコトされているものを理解するだろうあなたのコードとサーバー

http://phptutorial.info/?mysql-real-escape-string
http://www.sitepoint.com/php-security-blunders/
http://roshanbh.com.np/2008/05/tighten-php-security-functions.html

を確保するグラムあなたが直接$pageを使用していないので、私は

関連する問題