首页 > csdn导入, 技术, 转载 > 开发web应用难于上青天,web开发十八难

开发web应用难于上青天,web开发十八难

系统越做越大,问题越来越多,有些彻底解决了,有些凑合解决了,有些还没有办法,现在把碰到的主要问题列出来,给大家前车之覆:

1  跨浏览器布局的问题: 由于浏览器之间的微小差距,在布局复杂的页面时将会碰到麻烦
我现在的项目就要求firefox 和ie. 由于ie一些著名的bug,有时候不小心就踩到地雷。

2  日期控件
如何实现跨浏览器的日期控件,如何设定缺省值,如何实现大范围的日期直接定位?如何自适应多区域格式问题?
我也用过不少现成的东西,比如 http://www.mattkruse.com/javascript/calendarpopup/
但都有或多或少的问题

3、分辨率
如何支持常见分辨率,例如800*600 ,1024*768,1280*1024?表格和层如何自适应?
有些客户喜欢居左居中,有些内容超宽,有些超宽内容还在容器里,有些还要叠加,把这些混在一起麻烦就来了

4、防止SQL注入式攻击
参数使用占位符,这个算是基本解决了,只是有些担心数据库的效率。

5.防止脚本攻击。  有时候需要在页面允许部分html或javascript代码, 如显示多行文本。
html 转义我知道,但我要允许部分html代码起作用,比如我要让<br>起作用,其他不起作用,以实现多行文本
6、用户非授权页面访问
如何实现每个页面的安全验证,如何防止用户通过直接拷贝具体页面地址等方式,访问系统;  包括没有链接的某些页面和jsp 页面。 如何控制部分权限,最小控制单元是什么?

看上去很简单,但一深思问题就来了,
每个页面的安全验证:动态页面一般是 URL + Query String
URL数量有限,但Query String一般以id为参数,有许多,所以如以URL为基础验证,则有时候
粒度不够细,如加上Query String,则不能再以配置表为基础校验,因为Query String乘以
用户数量(或角色数量,将是一个天文数字),所以如何建立安全验证规则表又是一个头疼的
问题,每个系统的安全验证规则都不一样。

再深入,你会发现如果一个操作被分成几个步骤,此时,这几个步骤的页面必须是相同的权限
设置,否则用户操作到一半,告诉他没有权限,他会被气死的。

如果再细化粒度,页面某些元素能够被部分用户修改和看见,你的头开始疼了吗?
7、重复提交问题
功能操作完成后,鼠标右键点击所在页面,选择弹出菜单的刷新功能,容易出现重复提交问题。
功能操作完成后,通过浏览器的后退键进行重复操作,容易出现重复提交问题。
URL没有重定向,刷新页面出现重复提交问题。
某功能键反应时间延迟时,在短时间内重复点击该功能键,容易出现重复提交问题;
某些用户习惯双击按钮,某些用户错误地点了两次按钮,某些鼠标出现故障,导致单击变成双击,结果发生重复提交。

如果不加处理,这些请求都会被服务器处理,从而导致错误的结果。

struts的token确实能解决问题,但用户老是向我抱怨,为什么我不
能用浏览器的回退按钮重新提交,我在其他网站上从没有这个问题,你如何解释?
然后你还会发现部分操作是能够允许重复提交的。

8.如何锁定资源如记录:这是一个老大难问题了,为此还搞了不少东西出来。
用 关键词 隔离级别 脏 锁定 去搜搜,就会发现,要解决这个问题是有方法的,但代价
你愿意承担吗?开发代价,性能代价,可用性代价

9,如何防止浏览器记住数据,某些浏览器能够为每一个URL记住用户输入的数据,在某些情况下是危险的。比如我修改了某些数据,但由于某些原因我想刷新,此时数据已经被其他用户修改,但在浏览器里面你看到的是你修改的数据(你用刷新按钮也不能看到新数据)。如果你再次保存,你认为你没有修改数据,但数据已经被修改了。当页面是脚本动态生成的时候,这个问题更严重。

常发生在firefox等浏览器上。

10,如何防止或侦测客户修改浏览器设置,比如客户在打开页面之后关闭脚本功能。
有时候甚至不是用户禁止脚本,而是么某些软件和插件,病毒甚至企业文化影响到用户设置。

11,回退问题,对于工作流熟悉的人对这个问题很清楚,某个操作节点如何回到启动点,如何回到上一节点,如何避免硬编码? 比如一个页面被两个操作流所共享,此时安全验证是个问题,回退也许要仔细考虑。

12,校验问题,如何同时实现客户端和服务器端校验,客户端调用服务器端的校验功能。
我已经在使用struts自带的apache commons validator,可是我不得不修改许多地方才能
用起来。比如我有些隐藏字段需要校验。但commons validator居然使用focus语句,导致出错。
这是小的bug,但更麻烦的是部分服务器端的校验没有办法在客户端实现。比如validwhen
又如,某些校验需要查询数据库,所以我想要的校验应该是能够被ajax 调用,这样
校验在客户端和服务器端完全一样,但这样客户端校验还有必要吗,我们原来用客户端校验
是看中他的校验响应快,不给服务器加负担。所以我又迷茫了。

13,如何防止数据伪造,如何防止客户使用特殊工具和技术伪造数据提交到服务器。
浏览器发送的数据都是遵循公开的标准,嗅探器等黑客工具可以随便地修改你的数据,
还有一些神奇的浏览器插件可以任意修改数据。就算ssl也只能保障中间传输,客户端无法控制。你还认为你的隐藏字段是安全的吗?你还认为你的select只有那几个选项吗?

14, 如何追踪定位错误,如何处理异常?
在一个运行的系统里,你如何知道哪个数据产生了这个错误?多个用户的日志绞缠在一起
如何组织?
15,如何在两个操作之间传递大量数据,尤其是非存储数据。
比如分页数据(按什么列排序的第几页,过滤条件)一般是不存储到数据库的,但在某些时候必须传递到下一个页面,session 也不是最终解决方案。
16, 带安全控制的断点续传的上载 和下载
甚至服务器端恐怕也要装点什么,这个可是许多企业的忌讳
17,分布式环境的特殊处理,
18,如何提高开发效率?

分类: csdn导入, 技术, 转载 标签:
  1. thomas
    2009年6月3日16:38 | #1

    web安全,防不胜防啊。跨浏览器的问题,等待浏览器大一统吧,呵呵。

    [回复]

  1. 本文目前尚无任何 trackbacks 和 pingbacks.

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word


Warning: fsockopen() has been disabled for security reasons in /home/onlymars/public_html/wp/wp-includes/class-snoopy.php on line 1148