我知道这个问题必须在这里被多次询问,但我没有找到我可以搜索的所有链接的解决方案。我不明白该怎么做。
我有一个表单,有2个文本框和1个提交按钮。表单名称为' form1'
这是我到目前为止所使用的:
<script type="text/javascript">
$("#form1").submit(function() {
$.ajax({
type: 'GET',
url: 'response.php',
data: {1: $("#txt1").val(), 2: $("#txt2").val()},
success: function (data) {
$("#update").prepend(data);
},
error: function (xhr, ajaxOptions, thrownError) {
alert(thrownError);
}
});
});
</script>
&#39;更新&#39;是一张桌子。
在response.php中解析数据后,我正在为它添加一个新行。
现在,问题是,使用AJAX这一点并不安全。用户可以使用诸如“防篡改数据”之类的插件。让firefox搞砸这些并发送他们想要的任何数据,无论他们输入什么。因此,使我容易受到XSS和CSRF攻击。
所以我尝试了另一种方法,我将表单的动作设置为response.php。
现在,有两个问题:
页面刷新。
如何通过PHP在另一个文档中创建表格行?早些时候,我只是回应它,然后AJAX为我添加了数据。
答案 0 :(得分:3)
要说清楚:除了&#34;刷新&#34;之外别无他法。或者AJAX。
你应该坚持使用AJAX。要修改您的安全问题,您可以向表单添加一个令牌,该令牌仅对该用户有效(在登录时保存在他的会话中)。因此,没有其他人可以以他的名义发送数据,从而消除了XSS和CSRF的风险。
您需要在AJAX请求中传输该令牌,并在response.php。
中进行检查在response.php中验证:
逃避进入数据库的所有内容。 mysql_real_escape_string或PDO将帮助您。
当您在页面的某处输出userdata时,请使用htmlspecialchars()。
在保存或打印任何值之前,您还可以考虑使用strip_tags()。
答案 1 :(得分:0)
由于您提交了表单请求,因此您应该使用POST。
其次,ajax帖子的安全性不亚于常规帖子,所以你不应该担心。
第三,如果你担心有人嗅探你的网络。让您的网站改为使用HTTP。
为了防止XSS攻击,您应该在使用类似htmlentities之类的内容将数据打印到最终用户之前修改数据。
为防止sql注入,我建议先使用PDO或至少转义用户输入。
答案 2 :(得分:0)
删除AJAX不是解决XSRF和XSS漏洞的解决方案。相反,你应该使用表单令牌,两步表格等来防止这种情况。
使用会话令牌并不是很难 - 您只需为每个表单生成一个令牌,将它们保存在服务器上并将服务器上的发送令牌与它们进行比较。为了确保安全,您应该为每个表单生成一个令牌,但您也可以为每个会话使用一个令牌。
顺便说一下。 XSS不是ajax或某些形式帖子的问题 - 这是一个不能逃避恶意输出的问题。 htmlentities和这样的东西,应该会帮助你。