基础知识:
我可以轻松地在不同的网站上制作一个表单,将脏字发布到字段中。根据验证规则,某些脏话是完全合法的,但我的雇主显然不希望这种情况发生。
我的印象是专门的黑客可以影响cookie,php会话,当然隐藏的字段很容易与引用等一起欺骗。如何阻止第三方网站发布到我的页面?
请随时帮助我Google。我的搜索条件很弱,并且我知道的方法会失败。
如果有人通过他们网站上的表单提交“d03boy吃猫”并让人们点击提交给我表单的链接怎么办? (承认这是可能的,我的公司不能接受任何风险)然后,当用户点击他们在“名称”字段“d03boy吃猫”中看到的链接并获得超级冒犯并联系PETA关于我们网站的内容。我们无法向用户解释发生了什么。没错,但是我的雇主不接受让单个用户感到不满的情况。
我们目前的解决方案是不报告任何用户输入,我认为这是一个很大的可用性问题。
答案 0 :(得分:1)
这听起来像是需要适用于用户生成内容的审核系统,而不是技术解决方案。显然,您可以检查引荐来源字段,内容清理并尝试过滤亵渎,但枚举错误从不有效。 (它可以是一个可接受的“第一次通过”,但人类在避免这种过滤器方面是无限的资源)。
将用户提交的内容放入队列,让主持人审核并批准内容。为了减轻负担,您可以将受信任的用户设置为“预先批准”,但您说您的客户不会接受任何风险。
坦率地说,我发现这是不可能的:即使是主持人,主持人也有可能破坏你的系统。如果这确实是真的(他们没有风险承受能力)那么我建议他们不接受任何用户输入,不信任版主并且实际上消除了网站本身(因为内部人员可能会变得流氓并且放置不正确的东西)。显然,每一个行为都有风险;您需要了解他们可以接受多少,例如基于审核人的审批队列。
答案 1 :(得分:0)
我不确定我完全理解你的问题,但我会尽力给你一个基本答案。
当其他人在您的表单中放入HTML时,通常会发生跨站点脚本(XSS)。您的网站允许这样做,因为它没有正确地转义HTML。如果你使用PHP,你可能想要使用htmlentities($ str,ENT_QUOTES)函数。
htmlentities($str, ENT_QUOTES)
答案 2 :(得分: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>
由于我不在网站上的任何其他地方使用会话,因此我认为我们不会对会话劫持有太多暴露。令牌会更改每个加载,并使令牌与您必须知道的会话相匹配