質問
基本:
- を使用する連絡先フォームがあります 検証するphp フォーム。 (クライアント側に加えて)ただし、これは任意のサーバー側言語で実行できます。
- サーバー側では A-z 0-9特定のフィールド(それは このフィールドを検証しても問題ありません 非常に限られた範囲の英語のみ)
- フォームにエラーが含まれる場合、ユーザーが再送信する前に再入力する必要がないように、フィールドに再入力します
- 合法的な使用が見つかったとしても、他のサイトがフォームに投稿しないようにしたいと思います。
別のWebサイトで簡単にフォームを作成して、汚い単語をフィールドに投稿できます。特定の汚い言葉は検証規則に従って完全に合法ですが、私の従業員は明らかにそれが起こることを好まないでしょう。
私は、専用のハッカーがCookie、PHPセッションに影響を与える可能性があるという印象を受けています。サードパーティのサイトが自分のページに投稿するのをブロックするにはどうすればよいですか?
これについても、Googleでお気軽にお問い合わせください。私の検索用語は弱く、私が知っている方法の呼び出しは失敗します。
「d03boys cats cats」と投稿した場合自分のサイトのフォームを介して、ユーザーがフォームに送信するリンクをクリックするようにしますか? (それが可能であり、私の会社がリスクを受け入れることはできないことを認めてください)ユーザーがリンクをクリックすると、「名前」内に表示されます。フィールド「d03boyは猫を食べる」非常に腹を立て、サイトのコンテンツについてPETAに連絡します。ユーザーに何が起こったのかを説明することはできません。確かに、何も起こりませんでしたが、単一のユーザーを動揺させることは私の雇用主には受け入れられません。
現在の解決策は、ユーザー入力を報告しないことです。これは、ユーザビリティの大きな問題だと思います。
解決
これは、技術的な解決策ではなく、ユーザーが生成したコンテンツに適切なモデレーションシステムが必要なようです。リファラーフィールド、コンテンツスクラブを確認し、冒filterをフィルタリングすることはできますが、悪いことを列挙することは never できます。 (これは許容可能な「最初のパス」になる可能性がありますが、人間はそのようなフィルターを避けるために限りなく機知に富んでいます。)
ユーザーが送信したコンテンツをキューに入れ、モデレーターにコンテンツのレビューと承認を依頼します。負荷を軽減するために、信頼できるユーザーを「事前承認済み」に設定できますが、クライアントはリスクを受け入れられないと言いました。
率直に言って、私は不可能だと思います。モデレーターであっても、モデレーターがシステムを破壊するリスクがあります。それが実際に正しい場合(リスク許容度がゼロ)、ユーザー入力を受け入れず、モデレーターを信頼せず、実際にサイト自体を削除することをお勧めします(インサイダーが不正になり、不適切なものを置く可能性があるため)。明らかにすべての行為にはリスクがあります。モデレーターに基づく承認キューなど、彼らがどれだけ受け入れることができるかを調べる必要があります。
他のヒント
あなたの質問を完全に理解しているとは思いませんが、基本的な答えを提供するために最善を尽くします。
クロスサイトスクリプティング(XSS)は一般に、他の誰かがフォームにHTMLを挿入したときに発生します。あなたのウェブサイトは、HTMLを適切にエスケープしていないため、これを許可しています。 PHPを使用する場合、おそらくhtmlentities($ str、ENT_QUOTES)関数を使用する必要があります。
htmlentities($str, ENT_QUOTES)
私の試み
...
<?
$form_token = "";
$token = "";
$encoded_token = "";
$salt = "ThiséèÞ....<*>#214;yiìeéèÞ"; //it is 70 characters long
...
...
$blnGoodToken = false;
...
...
//Check for the encoded token
session_start();
$encoded_token = GetSuper('POST', 'TOKEN');
if (isset(私の試み
<*>
サイトの他の場所ではセッションを使用していないので、セッションハイジャックにさらされているとは思わない。トークンは各ロードを変更します。セッションに一致するトークンを取得するには、知っておく必要があります
- SHAを使用しています。簡単な推測
私のphpコードを作成します
- セッションで保持します。私は考えます
セッションは取得可能です
- 私の塩。これはいいと思う
秘密の。彼らは私の塩を知っていれば、彼らはすでに
サーバーを所有している
SESSION['TOKEN'])) {
if (sha1(私の試み
<*>
サイトの他の場所ではセッションを使用していないので、セッションハイジャックにさらされているとは思わない。トークンは各ロードを変更します。セッションに一致するトークンを取得するには、知っておく必要があります
- SHAを使用しています。簡単な推測
私のphpコードを作成します
- セッションで保持します。私は考えます
セッションは取得可能です
- 私の塩。これはいいと思う
秘密の。彼らは私の塩を知っていれば、彼らはすでに
サーバーを所有している
SESSION['TOKEN'] + $salt) === $encoded_token) {
$blnGoodToken = true;
//echo "Good Token";
}
else {
//echo "Bad Token";
$blnGoodToken = false;
unset(私の試み
<*>
サイトの他の場所ではセッションを使用していないので、セッションハイジャックにさらされているとは思わない。トークンは各ロードを変更します。セッションに一致するトークンを取得するには、知っておく必要があります
- SHAを使用しています。簡単な推測
私のphpコードを作成します
- セッションで保持します。私は考えます
セッションは取得可能です
- 私の塩。これはいいと思う
秘密の。彼らは私の塩を知っていれば、彼らはすでに
サーバーを所有している
SESSION);
session_unset();
session_destroy();
session_start();
}
}
else {
$blnDoit = false;
echo "No Token, possible no session";
}
$token = uniqid(rand(), TRUE);
私の試み
<*>
サイトの他の場所ではセッションを使用していないので、セッションハイジャックにさらされているとは思わない。トークンは各ロードを変更します。セッションに一致するトークンを取得するには、知っておく必要があります
- SHAを使用しています。簡単な推測
私のphpコードを作成します
- セッションで保持します。私は考えます
セッションは取得可能です
- 私の塩。これはいいと思う
秘密の。彼らは私の塩を知っていれば、彼らはすでに
サーバーを所有している
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>
サイトの他の場所ではセッションを使用していないので、セッションハイジャックにさらされているとは思わない。トークンは各ロードを変更します。セッションに一致するトークンを取得するには、知っておく必要があります
- SHAを使用しています。簡単な推測 私のphpコードを作成します
- セッションで保持します。私は考えます セッションは取得可能です
- 私の塩。これはいいと思う 秘密の。彼らは私の塩を知っていれば、彼らはすでに サーバーを所有している