-4

というページを作りましたdelete.php

次のコードで

<?php

require_once("database.php");
$con = mysql_connect($config["db_server"],$config["db_user"],$config["db_pass"]);
mysql_select_db($config['db_name'], $con);


// The SQL statement that deletes the record
$strSQL = "DELETE FROM records WHERE record_id = 1";
mysql_query($strSQL);

// Close the database connection
mysql_close();
?>

ここhttp://www.domain.com/delete.php で、テーブル レコードのレコード ID が 1 のレコードを削除します。

PHP文字列を使用するにはどうすればよいhttp://www.domain.com/delete.php?del?=25 ですrecord_id 25か?

ありがとう。

4

2 に答える 2

5

$_GETスーパーグローバルを使用して、渡された変数をキャプチャします。

$deleteId = $_GET['del'];
$strSQL = "DELETE FROM records WHERE record_id = $deleteId";

しかし、これは安全ではなく間違っています。このコードは使用しないでください。

関数の使用を停止しmysql_(非推奨)準備済みステートメントを使用して SQL インジェクションを防ぐ必要があります。

コメントで述べたように、Web スパイダーに問題がある可能性があるため、この方法は推奨されません。この記事ではその問題について説明し、この質問ではベスト プラクティスについて説明します。

于 2013-11-06T21:57:43.803 に答える
1

まず、URL の構成が正しくありません。そのはず:

http://www.domain.com/delete.php?del=25

次に、delviaGETを使用して値にアクセスできます。

 $del_id = $_GET['del'];
 $strSQL = "DELETE FROM records WHERE record_id = $del_id";

mysql_廃止されました。代わりにmysqli_ または (さらに良い) PDO を使用する必要があります

上記のコードは、mysql インジェクションと呼ばれるものの影響を受けやすくなっています。

経験則として、ユーザーからのデータは絶対に信頼しないでください。あなたがここでやっていることは、誇張なく悲惨なことです。

例:

//GET value: dave
query = " SELECT username, password FROM users WHERE username=$name ";
//Translates to:
query = " SELECT username, password FROM users WHERE username='dave' ";


//malicious input
//GET value: 'OR'1
query = " SELECT username, password FROM users WHERE username=$name ";
//Translates to:
query = "SELECT username, password FROM users WHERE username=''OR'1' ";

ここで厄介なのは、 1 が true と評価されるため、users テーブル内のすべてのユーザー名とパスワードが返されることです!

mysqli_real_escape_string() が救助に

口では言いますが、この関数は、MySQL に適した '\' 引用符を使用してインジェクションの試行を回避することにより、セーフガードを提供します。

したがって、この関数を使用してすべての GET/POST データをポンピングすると、セキュリティのレイヤーが提供されます。

$name = mysqli_real_escape_string($_POST['username'];

うまくいけば、それは理にかなっています。ラプソディゼーションにもかかわらず、代わりにmysqli_real_escape_string()もう少し洗練されたものを使用することを (ある時点で) 検討することを強くお勧めしPDOます。

于 2013-11-06T22:06:03.610 に答える