系统越做越大,问题越来越多,有些彻底解决了,有些凑合解决了,有些还没有办法,现在把碰到的主要问题列出来,给大家前车之覆:1  跨浏览器布局的问题: 由于浏览器之间的微小差距,在布局复杂的页面时将会碰到麻烦2  日期控件
  如何实现跨浏览器的日期控件,如何设定缺省值,如何实现大范围的日期直接定位?如何自适应多区域格式问题?3、分辨率
  如何支持常见分辨率,例如800*600 ,1024*768,1280*1024?表格和层如何自适应?4、防止SQL注入式攻击5.防止脚本攻击。  有时候需要在页面允许部分html或javascript代码, 如显示多行文本。6、用户非授权页面访问
  如何实现每个页面的安全验证,如何防止用户通过直接拷贝具体页面地址等方式,访问系统;  包括没有链接的某些页面和jsp 页面。 如何控制部分权限,最小控制单元是什么?
 
7、重复提交问题
    功能操作完成后,鼠标右键点击所在页面,选择弹出菜单的刷新功能,容易出现重复提交问题。
    功能操作完成后,通过浏览器的后退键进行重复操作,容易出现重复提交问题。
   URL没有重定向,刷新页面出现重复提交问题。
   某功能键反应时间延迟时,在短时间内重复点击该功能键,容易出现重复提交问题;
   某些用户习惯双击按钮,某些用户错误地点了两次按钮,某些鼠标出现故障,导致单击变成双击,结果发生重复提交。如果不加处理,这些请求都会被服务器处理,从而导致错误的结果。8.如何锁定资源如记录:这是一个老大难问题了,为此还搞了不少东西出来。9,如何防止浏览器记住数据,某些浏览器能够为每一个URL记住用户输入的数据,在某些情况下是危险的。比如我修改了某些数据,但由于某些原因我想刷新,此时数据已经被其他用户修改,但在浏览器里面你看到的是你修改的数据(你用刷新按钮也不能看到新数据)。如果你再次保存,你认为你没有修改数据,但数据已经被修改了。当页面是脚本动态生成的时候,这个问题更严重。10,如何防止或侦测客户修改浏览器设置,比如客户在打开页面之后关闭脚本功能。11,回退问题,对于工作流熟悉的人对这个问题很清楚,某个操作节点如何回到启动点,如何回到上一节点,如何避免硬编码?12,校验问题,如何同时实现客户端和服务器端校验,客户端调用服务器端的校验功能。13,如何防止数据伪造,如何防止客户使用特殊工具和技术伪造数据提交到服务器。
14, 如何追踪定位错误,如何处理异常?
15,如何在两个操作之间传递大量数据,尤其是非存储数据。
16, 带安全控制的断点续传的上载 和下载
17,分布式环境的特殊处理,
18,如何提高开发效率?

解决方案 »

  1.   

    9,如何防止浏览器记住数据在每次提交数据的目标页面地址后加一个随机(无重复)的参数比如a.asp?DNT=200606071300086597421
                     日期时间 |  随机数 
    或者通过换算,,让别人看起来神秘一点这样会让浏览器以为每次访问的都是不同的页面
    也就没有缓存和烦恼了不知道这样可不可以
      

  2.   

    6、用户非授权页面访问
    如何实现每个页面的安全验证,如何防止用户通过直接拷贝具体页面地址等方式,访问系统; 包括没有链接的某些页面和jsp 页面。 如何控制部分权限,最小控制单元是什么?
    是在烦了的话
    可以开发一套权限矩阵控制系统在每个开发的系统中都使用权限矩阵控制
    可以精确到(用户/ip) 动作级的控制就是麻烦了一些
      

  3.   

    1.目前的项目中对这个要求不多。
    2.现成的好东西: jscalendar, yui里也有日期组件。
    3.页面以800*600或者1024*768为准, 居中显示。
    4. 传入参数使用占位符,严禁把传入参数拼到sql中, 或者使用hibernate的, 基本从来没遇到过sql注入的问题。 用java的如果还在为sql注入烦恼,建议补下sql基础。5.html 转义,<和>前后加上空格,成 < 和 > ,6.过滤器
    7. 我写了一个简单的过滤器,比struts的token更方便。8.不太明白。9.不太明白。10.不考虑那些禁止脚本的用户(这部分用户能够产生的效益和所付出的成本不成比例),使用该系统的基本要求是ie6.0或者ff1.0以上版本,支持cookie和javascript.11.没有接触过,不了解。12.使用 apache commons validator。13.加强客户端身份识别,我自己设计了一个过滤器,可以控制好这点。14.所有catch ,都必须log.error("error:",ex); 然后看日志。15.不太了解。16.数据拆分打包分块传输,单纯的浏览器无法做到,需要配合applet或者activex.17.没有经验。18.调整代码风格,方便代码生成器生成,前天重构的时候对某些文件使用代码生成器重构,重新生成了几千行代码。
      

  4.   

    6有两种解决方法
    1.用过滤器--稍复杂
    2.在业面设置session属性
      

  5.   

    得过且过谁都能玩,一较真全玩完比如 问题  6、用户非授权页面访问看上去很简单,但一深思问题就来了,
      每个页面的安全验证:动态页面一般是 URL +  Query String
       URL数量有限,但Query String一般以id为参数,有许多,所以如以URL为基础验证,则有时候
      粒度不够细,如加上Query String,则不能再以配置表为基础校验,因为Query String乘以
      用户数量(或角色数量,将是一个天文数字),所以如何建立安全验证规则表又是一个头疼的
      问题,每个系统的安全验证规则都不一样。  如果再细化粒度,页面某些元素能够被部分用户修改和看见,你的头开始疼了吗?
      

  6.   

    问题9常发生在firefox等浏览器上。
      

  7.   

    to pigo():
    1.目前的项目中对这个要求不多。
       我现在的项目就要求firefox 和ie.
      
    2.现成的好东西: jscalendar, yui里也有日期组件。
       我也用过不少现成的东西,比如 http://www.mattkruse.com/javascript/calendarpopup/
       但都有或多或少的问题  
    3.页面以800*600或者1024*768为准, 居中显示。
       有些客户喜欢居左,有些内容超宽,有些超宽内容还在容器里,有些还要叠加,把这些混在一起你就死定了4. 传入参数使用占位符,严禁把传入参数拼到sql中, 或者使用hibernate的, 基本从来没遇到过sql注入的问题。 用java的如果还在为sql注入烦恼,建议补下sql基础。
       这个算是基本解决了,只是有些担心数据库的效率。5.html 转义,<和>前后加上空格,成 < 和 > ,
      html 转义我知道,但我要允许部分html代码起作用,比如我要让<br>起作用,其他不起作用,以实现多行文本
    6.过滤器
       看我前面的注解7. 我写了一个简单的过滤器,比struts的token更方便。
       struts的token确实能解决问题,但用户老是向我抱怨,为什么我不
        能用浏览器的回退按钮重新提交,我在其他网站上从没有这个问题,你如何解释?
       然后你还会发现部分操作是可以允许重复提交的。8.不太明白。
      你用 关键词  隔离级别 脏 锁定 去搜搜,就会发现,要解决这个问题是有方法的,但代价
      你愿意承担吗?开发代价,性能代价,可用性代价9.不太明白。
      常发生在firefox等浏览器上。10.不考虑那些禁止脚本的用户(这部分用户能够产生的效益和所付出的成本不成比例),使用该系统的基本要求是ie6.0或者ff1.0以上版本,支持cookie和javascript.
       有时候不是用户禁止脚本,而是么某些软件和插件,病毒甚至企业文化影响到用户设置。11.没有接触过,不了解。
       比如一个页面被两个操作流所共享,此时安全验证是个问题,回退也许要仔细考虑。12.使用 apache commons validator。
       我已经在使用struts自带的apache commons validator,可是我不得不修改许多地方才能
       用起来。比如我有些隐藏字段需要校验。但commons validator居然使用focus语句,导致出错。
       这是小的bug,但更麻烦的是部分服务器端的校验没有办法在客户端实现。比如validwhen
      又如,某些校验需要查询数据库,所以我想要的校验应该是能够被ajax 调用,这样
      校验在客户端和服务器端完全一样,但这样客户端校验还有必要吗,我们原来用客户端校验
      是看中他的校验响应快,不给服务器加负担。所以我又迷茫了。13.加强客户端身份识别,我自己设计了一个过滤器,可以控制好这点。
      浏览器发送的数据都是遵循公开的标准,嗅探器等黑客工具可以随便地修改你的数据,
      还有一些神奇的浏览器插件可以任意修改数据。就算ssl也只能保障中间传输,客户端无法控制。你还认为你的隐藏字段是安全的吗?你还认为你的select只有那几个选项吗?
     14.所有catch ,都必须log.error("error:",ex); 然后看日志。
      在一个运行的系统里,你如何知道哪个数据产生了这个错误?多个用户的日志绞缠在一起
      如何组织?
    15.不太了解。
       比如分页数据(按什么列排序的第几页,过滤条件)一般是不存储到数据库的,但在某些时候必须传递到下一个页面,
       session 也不是最终解决方案。16.数据拆分打包分块传输,单纯的浏览器无法做到,需要配合applet或者activex.
      服务器端恐怕也要装点什么,这个可是许多企业的忌讳
    17.没有经验。18.调整代码风格,方便代码生成器生成,前天重构的时候对某些文件使用代码生成器重构,重新生成了几千行代码。
      没有那么简单。
      

  8.   

    13.加强客户端身份识别,我自己设计了一个过滤器,可以控制好这点。
      浏览器发送的数据都是遵循公开的标准,嗅探器等黑客工具可以随便地修改你的数据,
      还有一些神奇的浏览器插件可以任意修改数据。就算ssl也只能保障中间传输,客户端无法控制。你还认为你的隐藏字段是安全的吗?你还认为你的select只有那几个选项吗?身份的识别主要靠的是客户端写在HTTP头中的SESSIONID,这个东西是随机生成的,我很想知道任意修改数据就可以绕开过滤器身份验证了吗?不太可能
      

  9.   

    8.如何锁定资源如记录:这是一个老大难问题了,为此还搞了不少东西出来。LZ可以说说一个具体点的应用场景
    10.不考虑那些禁止脚本的用户(这部分用户能够产生的效益和所付出的成本不成比例),使用该系统的基本要求是ie6.0或者ff1.0以上版本,支持cookie和javascript.
       有时候不是用户禁止脚本,而是么某些软件和插件,病毒甚至企业文化影响到用户设置。禁止了JS,那AJAX的好处还有什么的了?干脆连IE都禁止了,这下世界太平了.这个我认为要学会引导用户14.所有catch ,都必须log.error("error:",ex); 然后看日志。
      在一个运行的系统里,你如何知道哪个数据产生了这个错误?多个用户的日志绞缠在一起
      如何组织?LZ没有用过LOG4J吗?
    16.数据拆分打包分块传输,单纯的浏览器无法做到,需要配合applet或者activex.
      服务器端恐怕也要装点什么,这个可是许多企业的忌讳服务器不需要的啊,部署JAVA程序就好的
      

  10.   

    to xlyyc(宇):身份的识别主要靠的是客户端写在HTTP头中的SESSIONID,这个东西是随机生成的,我很想知道任意修改数据就可以绕开过滤器身份验证了吗?不太可能你没有认真看我的原文,被pigo篡改的意思搞迷糊了。比如我是一个合法的用户,有账号,当我登录系统的时候,系统不知道我的浏览器安装了某些特殊的
    插件,我的客户端安装了某些特殊的软件,这时,我就可以慢慢试探着伪造一些数据给系统,
    如果你的服务器端的校验是超级强健,那你有本事,实际上大部分系统的校验只能在这样一个假设下
    进行:  客户是一个标准的浏览器,没有安装特使插件,没有某些特殊的软件。
      

  11.   

    to xlyyc(宇):
    禁止了JS,那AJAX的好处还有什么的了?干脆连IE都禁止了,这下世界太平了.这个我认为要学会引导用户问题是服务器端没有任何办法检测用户是否禁止了JS。
      

  12.   

    to xlyyc(宇):LZ没有用过LOG4J吗?我现在的系统就是在用它,但在一个运行的系统里,你如何知道哪个数据产生了这个错误?多个用户的日志绞缠在一起又如何组织?