1

セキュリティ上の制約を設け、URLからデータまたはIDを安全な方法で送信する別の方法を知りたいWebアプリケーションに取り組んでいます。例:

$id=$row=['id'];
$name=$row['name'];

<a href="projects.php?project_id=<?pho echo $id; ?>&name=<?php echo $name; ?>">

では、この2つの属性を安全な方法でproject.phpに送信する別の方法はありますか?IDと名前がURLに表示されないようにしたいだけです。私を案内してください、私はこれがPHPの非常に基本的な機能であることを知っています、そして私はただ代替または安全な解決策を見つけたいです。getを使用してデータを送信していることはわかっていますが、タグを使用せずにproject.phpにデータを送信する別の方法はありますか?

私はすべてのコメントと答えの後にこれを試したので、答えは:

<?php
$id="1";
$name="Harshal";
?>
<a href="projects.php?id=<?php echo base64_encode($id) ?>&name=<?php echo base64_encode($name) ?>">Send</a>

およびprojects.php

<?php
echo $idd=base64_decode($_GET['id']);
echo $namme=base64_decode($_GET['name']);
?>

できます...!!

4

5 に答える 5

2

投稿変数の使用。これをHTMLから送信しようとしている場合、唯一の手段はこれを変更することです。

<a href="projects.php?project_id=<?php echo $id; ?>&name=<?php echo $name; ?>">

これに:

<form action="projects.php" method="post"><input type="hidden" name="project_id" value="<?= $id ?>"/><input type="hidden" name="name" value="<?= $name ?>"/><input type="submit" value="Send name"/></form>

接続を実際に安全にしたい場合は、HTTPSを使用するのが最善のオプションです。

于 2012-09-06T08:24:52.177 に答える
2

暗号化に関する注意事項では、ハッシュは一方向であることに注意してください。ハッシュアルゴリズムを使用して名前を「暗号化」し、行末で読み取り可能にすることはできません。ただし、この方法でHTTPを介して送信される暗号化されたデータを処理する場合は、たとえばmcryptを使用できます。次に、結果のバイナリデータをブラウザで安全な方法で出力するという問題に直面した場合は、Base64エンコーディングに依存する必要があります。

例えば:

$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, 'passkeyhere', 'My name', MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND));
echo base64_encode($crypttext);

出力:

rLXuVMlI9DWgF96peQ5IREexDk4XBwCn+34SEuy5eH4=
于 2012-09-06T08:32:54.650 に答える
1

URLで送信されたものはすべて、デフォルトではほとんど誰でも、誰もが見たり、使用したり、悪用したりすることができます。

そうは言っても、単にそのように送信しなければならない場合があります。コードでデータを安全に処理できるため、URLのデータを安全にすることはできません。

たとえば、URLを介してデータを渡し、単にデータを表示する場合、誰でもURLビットを変更して、想定外の情報を表示できます。ただし、URLを介してデータを送信し、コードがユーザーにデータを表示できるかどうかを確認するためのチェックを実行すると、突然、データの安全性が大幅に向上します。

もう1つの簡単な方法は、データをセッションにコピーし、ユーザーを新しいページにリダイレクトするリンクを提供することです。つまり、セッション内の情報に基づいて必要なコンテンツを表示し、実際に表示が許可されていることを再度確認します。

URLは、数秒以内に誰でも編集できることに注意してください。投稿データは実際にはそれほど違いはありませんが、ファッジするのにもう少し手間がかかるかもしれません。それを保護するには、あなたが持っているコードがそれを安全な方法で扱うことができることを確認する必要があります。

編集:

コードを次のように変更する必要があります。

<?php
$id="1";
$name="Harshal";
?>
<a href="projects.php?id=<?php echo base64_encode($id); ?>&name=<?php echo base64_encode($name); ?>">Send</a>
于 2012-09-06T08:25:55.143 に答える
1

まず第一に、一般の人がURLでユーザーIDなどを偽造するのは困難です。POSTメソッドを使用するか、bCryptを使用してURLでハッシュを渡します。

第二に、耳が落ちるのを防ぐために、URLでSSL(https://)を使用するのが最善です。

于 2012-09-06T08:26:01.083 に答える
0

Webページ(PHPを含む)間でデータを渡す方法は、GETとPOSTを使用します。POSTはそれを非表示にしますが、表示から削除しません。リクエスト内のプレーンテキストのままです。https接続を強制してPOSTを使用すると、情報はpostリクエストに隠され、秘密鍵を使用して暗号化および復号化されます。

舞台裏でそれを実行したいだけの場合は、ajaxを使用して、ページを送信せずにデータを送受信できます。

于 2012-09-06T08:26:01.197 に答える