ホームページ  >  記事  >  バックエンド開発  >  PHPにおけるSQLインジェクションを防ぐ方法の分析login_PHPチュートリアル

PHPにおけるSQLインジェクションを防ぐ方法の分析login_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:19:38691ブラウズ

PHPログインにおけるSQLインジェクションを防ぐ方法の分析

SQLインジェクションを防ぐこれらの詳細な問題は、通常、ユーザーが送信したデータに特別なフィルタリングを実行しない不注意なプログラマや初心者の間で発生します。これをテストすると、データベースが壊れてしまいます。次に、ユーザーがセキュリティ設定なしでログインしたときに発生する可能性のある簡単な SQL インジェクション方法を見てみましょう。

例えば、次のログインコード:

コードは次のとおりです

if($l = @mysql_connect('localhost', 'root', '123')) または die('データベース接続に失敗しました');

mysql_select_db('テスト');

mysql_set_charset('utf8');

$sql = 'ユーザー名 = "$username" およびパスワード = "$password" のテストから * を選択';

$res = mysql_query($sql);

if(mysql_num_rows($res)){

header('Location:./home.php');

}その他{

die('間違った入力');

}

上記の SQL ステートメントには大きなセキュリティ上のリスクがあるため、次のユニバーサル パスワードとユニバーサル ユーザー名を使用すると、ページに簡単にアクセスできます。

コードは次のとおりです

  很明显,针对这条sql语句的万能密码是: ***" or 1 = "1

1. $sql = 'ユーザー名 = "***" およびパスワード = "***" または 1 = "1" のテストから * を選択します';

 代码如下  

2. $sql = 'select * from test where username ="***" union select * from users/* and password = "***"';

  正斜线* 表示后面的不执行,mysql支持union联合查询, 所以直接查询出所有数据; 所以针对这条sql语句的万能用户名是:***" union select * from users/*

  但是,此注入只针对代码中的sql语句,如果

 代码如下  
$sql = "select * from test where username = $username and password = $password";

  上面的注入至少已经不管用了,不过方法是一样的;

  在使用PDO之后,sql注入完全可以被避免,而且在这个快速开发的时代,框架横行,已然不用过多考虑sql注入问题了。

  下面整理了两个防止sql注册函数

 代码如下  

/* 过滤所有GET过来变量 */
foreach ($_GET as $get_key=>$get_var)
{
if (is_numeric($get_var)) {
$get[strtolower($get_key)] = get_int($get_var);
} else {
$get[strtolower($get_key)] = get_str($get_var);
}
}
/* 过滤所有POST过来的变量 */
foreach ($_POST as $post_key=>$post_var)
{
if (is_numeric($post_var)) {
$post[strtolower($post_key)] = get_int($post_var);
} else {
$post[strtolower($post_key)] = get_str($post_var);
}
}
/* 过滤函数 */
//整型过滤函数
function get_int($number)
{
return intval($number);
}
//字符串型过滤函数
function get_str($string)
{
if (!get_magic_quotes_gpc()) {
return addslashes($string);
}
return $string;
}

こんなことを書くブログもあります

コードは次のとおりです

関数 post_check($post)
{
if (!get_magic_quotes_gpc()) // magic_quotes_gpc がオンかどうかを判断します
{
$post = addlashes($post); // magic_quotes_gpc が開かれていない場合に送信されたデータをフィルターします
}
$post = str_replace("_", "\_", $post) // '_' を除外します
; $post = str_replace("%", "\%", $post) // '%' を除外します
; $post = nl2br($post) // 変換を入力します
$post= htmlspecialchars($post); // HTMLタグ変換
$post を返す
}
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/873235.html技術記事 PHP ログインにおける SQL インジェクションを防ぐ方法の分析 SQL インジェクションの防止 これらの詳細な問題は通常、不注意なプログラマや初心者プログラマの間で発生します。彼らはユーザーが送信したデータを実行しません...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。