0

我的网站上有一些简单的脚本,允许用户完成计算日期差异、进行数学计算等任务。该网站大约 95% 是纯 html(不是 php 生成的),除了一些将用户输入发布到服务器的 jquery/ajax -side 进行计算。ajax代码如下:

$.ajax({
    type: "POST",
    url: "script/calc.php",
    data: { userval:val},
    success: function(response){
    //display response
    }
});

当用户输入值是/应该是数字时,我在 php 文件“calc.php”的 post 变量之前添加(int),即使在安全性方面我认为它不会带来任何问题。

我正在考虑过滤 http_referer,所以 php 文件只从我的网站获取请求(以避免任何滥用),但我读过仅依靠 http_referer 并不是最终的技巧,因为它依赖于用户的浏览器,有时它可能是空的. 另一方面,我知道默认情况下 ajax 不允许发布到另一个域,但也有一个 hack。

我不是铁杆安全人员,我知道一些基础知识,所以你们有什么可以建议我的吗?在这种情况下可能会出什么问题。请注意,我不使用任何数据库,只有一个 php 文件可以进行一些计算,仅此而已(没有像访问任何目录、文件上传或类似的东西)。

还有什么我应该认真考虑的,以防止服务器滥用、xss 攻击或类似的吗?

编辑:所以基本上 calc.php 有这样的结构(非常简单)

//期待一个整数 $userval = (int) $_POST['userval'];

$total_sum = ($userval*15) * (150* ($userval-2));

回声 $total_sum; 未设置($total_sum);

//结尾//

4

1 回答 1

0
  1. AJAX 使用具有 SOP(SAME ORGIN POLICY) 的 JavaScript http://en.wikipedia.org/wiki/Same_origin_policy

  2. 检查你有什么输入。如果您希望数字在 php 中检查它们并使用 (int) 或 intval() 进行转换

  3. 输入数据需要什么?如果您不将任何内容放入数据库,也不会更改文件,那么您将输入用于什么?

  4. 如果你有字符串并验证它们,你总是可以使用正则表达式,你也应该根据你想要存储它们的位置来转义它们。但是数字使事情变得更容易。

  5. 您提供的脚本已保存。

  6. 好的做法是记录所有可疑的尝试,如果有太多,你应该阻止用户。

于 2013-04-29T20:59:07.347 回答