0

I am building a sample server so that I can learn PHP and was wondering if this is a good way to secure my database. Essentially I am sending my own API key. Is this even doing anything useful, or would this be easy to overcome.

If this is horrible, what is the standard way to approach this?

Below is the php file

<?php
//Check if insert function exists
$apiKey = "6dM7V0n5GqYJLTMibQDf2gA2a94h8hbF";

if(function_exists($_GET['insert']) && ($_GET['key'])==$apiKey) {

    $id = $_GET['id'];
    $first=$_GET['first'];
    $last = $_GET['last'];

    //If found, call the function inser with value as a parameter
   $_GET['insert']($id,$first,$last);
}
?>

The web request looks like (from an iOS app);

    NSURL*url=[NSURL URLWithString:@"http://localhost/Tutorials/index.php?insert=insert&id=9000&first=YOOOO&last=LOOOO&key=6dM7V0n5GqYJLTMibQDf2gA2a94h8hbF"];

    //URL request
    NSURLRequest*request=[NSURLRequest requestWithURL:url];

    //Set the connection
    connection = [NSURLConnection connectionWithRequest:request delegate:self];

    if (connection) {
        webData=[[NSMutableData alloc]init];
    }
4

2 に答える 2

1

それがどれほど安全でないかを示すために、次のページをリクエストできます。

http://example.com/yourpage.php?insert=exec&id=rm+-rf+%2F&key=6dM7V0n5GqYJLTMibQDf2gA2a94h8hbF

一部の構成でブロックされない限り、これにより、PHP がアクセスできる限りサーバーのドライブが消去されます (おそらく Web サイト全体になります)。

代わりに、有効な関数のリストを作成し、それらを ID で参照する必要があります。関数を配列に格納し、GET パラメーターが指すインデックスを取得します。

于 2013-03-29T22:35:59.330 に答える
0

はい、それは安全ではありません。クライアントに HTTPS 接続を強制するか、ある種の双方向暗号化を使用できます。方法は非常に安全ではないためです。

ここを見てください:

http://tinsology.net/2009/06/creating-a-secure-login-system-the-right-way/

于 2013-03-29T22:28:42.213 に答える