/ / php - sicherer Zugriff auf Dateien - PHP, iPhone, Web-Services

PHP - sicherer Zugriff auf Dateien - PHP, iPhone, Web-Services

Ich habe eine iPhone-Anwendung, von der Daten abgerufen werdeneine Reihe von PHP-Dateien. Die PHP-Dateien geben XML basierend auf den Abfragezeichenfolgenparametern zurück. Was wäre der beste Weg, um den Zugang zu diesen "Webdiensten" zu sichern und einzuschränken?

Vielen Dank!

Bearbeiten: Auf dem Server läuft CentOS / Apache und ich würdemöchte den Zugriff so einschränken, dass nur die Anwendung auf die Dateien zugreifen kann. Ich möchte nicht, dass auf die Dateien von außerhalb der Anwendung zugegriffen werden kann. (Die Anwendung wird auch auf Android und Blackberry portiert.)

Antworten:

2 für die Antwort № 1

Sie könnten einen Hash in Ihrem iPhone generierenAnwendung, die zusammen mit den anderen Abfragestammparametern übergeben wird. Der Hash sollte einen "Schlüssel" (oder ein "gemeinsames Geheimnis") enthalten, der nur dem Webserver und der iPhone-Anwendung bekannt ist, sowie einen oder mehrere der übergebenen Abfragezeichenfolgenparameter.

Das PHP-Skript, das die Informationen erhältkann dann den Hash neu generieren, da er den "Schlüssel" kennt. Wenn der "Schlüssel" mit dem in der Abfragezeichenfolge übereinstimmt, ist die Anforderung gültig und stammt von einem iPhone, andernfalls nicht.

Aktualisieren: Um zu verhindern, dass jemand dieselbe Abfrage verwendetUm die gleichen Informationen immer wieder anzufordern, können Sie der Abfragezeichenfolge und dem Hash einen Zeitablauf "Ablauf" hinzufügen und überprüfen, ob die Anforderung nicht abgelaufen ist, wenn der Hash gültig ist.

Ich kann kein Objective-C bereitstellen, aber Ihr PHP-Skript könnte folgendermaßen aussehen:

<?php

$hash = md5("SHAREDSECRET".$_REQUEST["expiry"].$_REQUEST["param1"].$_REQUEST["param2"]);

if ( $hash != $_REQUEST["$hash"] || time() > $_REQUEST["expiry"] )
die("Invalid request.");

// Some additional code here for valid requests.

?>

Anhand des obigen Beispiels möchten Sie das iPhoneAnwendung, um einen MD5-Hash des gemeinsam genutzten Geheimnisses (in diesem Fall "SHAREDSECRET"), "param1" und "param2" zu erstellen und in die Anforderung an die PHP-Datei aufzunehmen.

Die vom iPhone angeforderte URL sollte folgendermaßen aussehen:

http://example.org/file.php?hash=value&expiry=timestamp&param1=value&param2=value

Natürlich würde der "Schlüssel" selbst nicht in der Abfragezeichenfolge übergeben, was es für jemanden schwierig macht, herauszufinden, wie er an Ihre Informationen gelangt (es sei denn, dies geschieht natürlich über die iPhone-App).


1 für die Antwort № 2

In einem ersten Schritt können Sie überprüfen, ob der Benutzeragent mit dem des iPhones übereinstimmt.

In unserem Fall berechnen wir einen Hash einer statischen Abfrageparam (oder Pfadzeichenfolge) kombiniert mit einem Salt und senden Sie diesen als zusätzlichen Abfrageparameter. Wir überprüfen die PHP-Seite auf die gleiche Weise, um sicherzustellen, dass der Hash identisch ist. Dies kann für jeden Client verwendet werden, Sie können jedoch für jeden Client, der mit Ihrem PHP-Dienst kommuniziert, unterschiedliche Salt-Werte festlegen.