小弟最近在做php和ajax的网页其中后台程序houtai.php里有以下代码:<?
header("Content-type: text/html;charset=GBK");//输出编码,避免中文乱码
switch ($go1) { //判断ajax传过来的命令,判断要执行的操作
case "判断用户登录" :
echo "成功登录!";
break;//判断用户登录
}
?>在前台提交了登录表单后
可以在页面上显示出 成功登录!
但是直接在地址栏输入 127.0.0.1/HouTai.php?go1=判断用户登录
也可以在页面上显示出 成功登录!这可很危险呀,不用登录就可以直接对网站系统操控了,
请问php和ajax做的网页如何保证安全?

解决方案 »

  1.   

    1、ajax 提交时采用 POST 方式,而不是 GET 方式
    2、ajax 提交时附加额外的身份识别标志
      

  2.   


    采用 POST 方式问题是后台如何知道用户没有 直接在地址栏输入 127.0.0.1/HouTai.php?go1=判断用户登录
      

  3.   

    switch ($go1)$go1 可以使用 私有key 进行加密/还原 再进行判断.这样可以保证传递的信息是安全的.另外难道你不是用SESSION来判断是否登录么?用ajax是什么想法?
      

  4.   

    这用什么不解的 post 方式时使用  $_POST 获取传输的数据。
    不理睬 $_GET 不就行了吗?
      

  5.   


    你要求POST你就检查$_POST,你管GET干什么。用户输入账号密码登陆成功就在session里记下来就行了, 客户端拿着COOKIE:PHPSESSIONID就可以保持会话了。 除非其他人来这个人电脑上把cookie偷走,否则就很安全了。 用户不提交我们发给他的COOKIE也无所谓,给它创建新的会话就行了,状态未登录。
      

  6.   

    把php.ini中的选项register_globals设为off
      

  7.   

    应该用那个session来记录你登录状态吧。
      

  8.   

    不知道楼上为什么认为post要比get安全?而关键问题没谈到。服务器安全要在服务器端做足,比如数据合法性检查,过滤某些字符等。而不是依赖客户端,特别是b/s架构的系统。
      

  9.   

    就拿楼主的登录做例子,一般的登录程序是这样的,1、接受客户端数据 2、对客户端数据做安全处理,比如检查数据类型、加斜线或mysql_real_escape_string或数据绑定生成sql 3、将sql到数据库里进行查询,查到服务器端设置一个登录成功标志和一些权限等相关信息。
      

  10.   

    对ajax提交的数据进行加密或者base64编码
      

  11.   

    在登录后添加session判断,如果已存在证明为非法登录,否则打开session并给session赋值:if (!isset($_SESSION['id']) || !$_SESSION['id'])
    echo "登陆成功";
    else
            echo "非法登录";
      

  12.   

    一:采用POST方法,你在url上输入正确的内容,后台是不会理踩的
        $nm = $_POST("name");
    二:对ajax传输的数据进行加密
    三:采用用户名密码方式,引入session处理安全机制