0

基礎:

  • php を使用してフォームを検証するお問い合わせフォームがあります。(クライアント側に加えて)ただし、これは任意のサーバー側言語で実行できます。
  • サーバー側では、特定のフィールドに対して Az 0-9 のみが許可されます (このフィールドを非常に限られた範囲でのみ英語に検証することは許容されます)。
  • フォームにエラーが含まれている場合は、フィールドを再入力して、ユーザーが再度送信する前に再入力する必要がないようにします。
  • 正当な使用が見つかったとしても、他のサイトに私のフォームを投稿させたくありません。

別の Web サイトで、汚い言葉をフィールドに投稿するフォームを簡単に作成できます。特定の汚い言葉は、検証規則に従って完全に合法ですが、私の従業員は明らかにそれが起こることを望んでいません.

私は、熱心なハッカーが Cookie や php セッションに影響を与える可能性があるという印象を受けています。もちろん、非表示のフィールドはリファラーなどと一緒に簡単に偽装できます。サードパーティのサイトが自分のページに投稿するのをブロックするにはどうすればよいですか?

これについても Google を手伝ってください。私の検索用語は弱く、失敗することがわかっているメソッドを呼び出します。

誰かが自分のサイトのフォームを介して「d03boy は猫を食べる」を送信し、それを私のフォームに送信するためのリンクをクリックするよう人々を誘導した場合はどうなりますか? (それが可能であることを認め、私の会社はリスクを受け入れることはできません) 次に、ユーザーが「名前」フィールド内にある「d03boy は猫を食べる」というリンクをクリックすると、非常に気分を害し、私たちのサイトのコンテンツについて PETA に連絡します。何が起こったのかをユーザーに説明することはできません。確かに、何も起こらなかったが、1 人のユーザーを動揺させることは、私の雇用主には受け入れられない.

私たちの現在の解決策は、ユーザー入力を報告しないことです。これは、私の意見では、ユーザビリティの大きな問題です。

4

3 に答える 3

1

これは、技術的な解決策ではなく、ユーザーが生成したコンテンツのモデレーションシステムが必要なようです。明らかに、リファラーフィールド、コンテンツスクラブをチェックして、冒涜をフィルタリングすることを試みることができますが、悪さを列挙することは決して機能しません。(これは許容できる「初回通過」である可能性がありますが、人間はそのようなフィルターを回避するのに無限に機知に富んでいます)。

ユーザーが送信したコンテンツをキューに入れ、モデレーターにコンテンツのレビューと承認を依頼します。負荷を軽減するために、信頼できるユーザーを「事前承認済み」に設定できますが、クライアントはリスクを受け入れることができないと言っています。

率直に言って、私はそれが不可能だと思います。モデレーターがいても、モデレーターがあなたのシステムを破壊するリスクがあります。それが実際に真実である場合(リスク許容度がゼロである場合)、ユーザー入力を受け入れず、モデレーターを信頼せず、実際にサイト自体を排除することをお勧めします(インサイダーが不正になり、不適切なものを置く可能性があるため)。明らかに、すべての行為にはリスクがあります。モデレーターベースの承認キューなど、彼らがどれだけ受け入れることができるかを知る必要があります。

于 2009-01-07T21:21:38.200 に答える
0

あなたの質問を完全に理解しているかどうかはわかりませんが、基本的な回答を提供できるよう最善を尽くします。

クロス サイト スクリプティング (XSS) は、通常、誰かが HTML をフォームに挿入したときに発生します。あなたのウェブサイトは、HTML を適切にエスケープしていないため、これを許可しています。PHP を使用している場合は、おそらく htmlentities($str, ENT_QUOTES) 関数を使用する必要があります。

htmlentities($str, ENT_QUOTES)

PHP HTML エンティティ

于 2009-01-07T20:29:02.487 に答える
0

私の試み

...
<?
$form_token = "";
$token = "";
$encoded_token = "";
$salt = "ThiséèÞ....$ÖyiìeéèÞ";  //it is 70 characters long
...
...
$blnGoodToken = false;
...
...
//Check for the encoded token
session_start();
$encoded_token = GetSuper('POST', 'TOKEN');
if (isset($_SESSION['TOKEN'])) {
    if (sha1($_SESSION['TOKEN'] + $salt) === $encoded_token) {
        $blnGoodToken = true;
        //echo "Good Token";
        }
    else {
        //echo "Bad Token";
        $blnGoodToken = false;
        unset($_SESSION);
        session_unset();
        session_destroy();
        session_start();
        }
    }
else {
    $blnDoit = false;
    echo "No Token, possible no session";
    }

$token = uniqid(rand(), TRUE);
$_SESSION['TOKEN'] = $token;
$form_token = sha1($token + $salt);
...
...
?>
...
...
<form action="request.php?doit=y" method="post">
    <input type="text" name="TOKEN" id="TOKEN" value="<?=$form_token?>" />
    <!--
    form stuff
    -->
    <input type="reset"  value="Clear" />
    <input type="submit" value="Submit" />
</form>

私はサイトの他の場所でセッションを使用していないので、セッション ハイジャックにさらされることはあまりないと思います。トークンは負荷ごとに変更され、セッションに一致するトークンを取得するには、知っておく必要があります

  1. 私はSHAを使用しています。私のPHPコードで行う簡単な推測
  2. 私はセッションでそれを保持します。セッションは取得可能だと思います
  3. 私の塩。これは良い秘密だと思います。彼らが私の塩を知っているなら、彼らはすでに私のサーバーを所有しています
于 2009-01-07T23:17:23.973 に答える