基础:

  • 我有一种联系形式,使用 php验证 形式。(此外,以客户端)要这样做,可以在任何服务器方语言。
  • 服务器只允许 A-z0-9为某些领域(这是 接受验证这个领域 英语仅用于非常有限的范围内)
  • 如果包含错误,我重新填充的领域,使用户不必重新输入之前再次提交
  • 我愿意不让其他网站张贴到我的形式,即使合法的使用可以在那里找到。

我可以很容易让一个形式上不同的网站,该网站员额,一个肮脏的词汇,一个领域。某些肮脏的词是完全合法根据的验证的规则,但我employeer显然不会喜欢这样的事情发生。

我的印象是,专用黑客可能会影响cookie,php会议和当然隐藏的领域很容易欺骗沿着与反向链接和这样的。我怎么可以阻止第三方网站张贴到我的页面?

请帮我在谷歌这一点。我的搜索方面的薄弱和抚养方法,我知道将会失败。

什么如果有人提出"d03boy吃猫"通过一个形式在其网站上,并得到人点击的链接提交给我的形式?(承认这是可能的,和我的公司不能接受任何风险),然后在一个用户点击的链接,他们看到里面的"名称"领域"d03boy吃猫"和获取的超级罪和善待动物组织的联系关于我们的网站的内容。我们只是无法解释为用户发生了什么事。真的,什么都没有发生,但是打乱一个单一的用户是不是可以接受我的雇主。

我们当前的方案是没有报告任何用户输入的,这在我看来是一个很大的实用性问题。

有帮助吗?

解决方案

这听起来你需要一个温和系统地对用户生成的内容,不是一个技术解决方案。很明显你可以检查引用的领域,内容刷洗和尝试过滤器的亵渎,但是列举了不良 从来没有 工程。(它可以是一个可接受的"第一次通过",但人类极足智多谋的在避免诸如过滤器)。

把用户提交的内容成队列,并具有主持人审查和核准内容。减轻负载,你可以设定可信的用户"预先核准",但是你说你的客户不能接受任何风险。

坦率地说,我发现那是不可能的:即使调解人有风险,主持人将会破坏你的系统。如果这实际上是真正的(他们有零风险容忍度),那么我建议他们不接受任何用户输入,不信任的主持人以及在事实上消除本身的网站(因为一个内幕可以去流氓把东西不正确的)。显然每一个行为有风险;你需要找出多少,他们可以接受,例如主持人根据批准的队列。

其他提示

我不知道我完全明白你的问题,但我将尽我所能来给你一个基本的答案。

Xss(XSS)发生,一般来说,当其他人将在HTML到您的形式。你的网站,允许这种事情发生,因为这不是逃避HTML正常。如果你使用PHP你可能想利用的htmlentities($str,ENT_QUOTES)的功能。

htmlentities($str, ENT_QUOTES)

PHP htmlentities

我尝试

...
<?
$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. 我用沙。一个容易猜到 在我的代码
  2. 我保证它在本届会议。我假设 本届会议是gettable
  3. 我的盐。我认为这是一个很好的 秘密。如果他们知道我的盐他们已经 拥有我的服务器
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top