提交PHP表单而无需重新加载或AJAX

时间:2014-06-13 08:48:34

标签: javascript php jquery ajax forms

我知道这个问题必须在这里被多次询问,但我没有找到我可以搜索的所有链接的解决方案。我不明白该怎么做。

我有一个表单,有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。

现在,有两个问题:

  1. 页面刷新。

  2. 如何通过PHP在另一个文档中创建表格行?早些时候,我只是回应它,然后AJAX为我添加了数据。

3 个答案:

答案 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和这样的东西,应该会帮助你。