本帖最后由 crying_boy 于 2012-09-13 00:13:51 编辑

解决方案 »

  1.   

    严不严谨自己从逻辑上仔细想想不就清楚了?
    如果输入都进行验证了的话是不会有问题,否没有验证的话,可能有以下问题:
    1.空字符串,如果数据库需要数值类型数据,空字符串默认转换为数值是会失败的,语句将失败
    2.单引号,单引号在sql语句中表示字符串,如果字符串本身包括单引号,会提前结束字符串导致语句错误
    其他暂时没想到,sql关键字的话由于在单引号内该没有问题。除了代码逻辑问题,还有的就是安全问题了,有严重安全隐患
    直接将前台一个字符串作为sql语句,这个太危险了,要知道前台的值都是可以通过调试工具或者地址栏js注入任意操纵的,或许别人会做一个删除数据库表的sql给你执行呢
      

  2.   

    这个功能就是检测出哪些项的值或状态被更新过,空字符串和sql语句的问题应该没有问题。一来所有字符串均在单引号内,二来所有值也经过了escape()编码至于js注入的话,我暂时没想到有什么方法可以对它进行js注入,因为它检测的是初始值的变化,至于说当成sql语句,这个只是这么一说。或许我提交至服务器端后再经过一次有效性验证,就应该没有这样的问题了
      

  3.   


    这个是必须的一个环节,我说的那种转化成sql语句的意思其实是想体现在按需更新这个意思上面至少,我检测到没有表单项发生变更,我这个表单不用提交了,对数据库的操作又减少了有变更项,提交后在服务器端做好相关验证,再动态构建一条更新的语句,也不用所有的字段都去更新了
      

  4.   

    对,服务器有验证就好了
    另:js注入是不能避免的,就算是局部变量不好注入js改变(当然实际上js注入可以直接改变整个函数,所以局部变量也不保险),还有调试工具,打个断点就可以任意修改你要提交的字符串了可以做成一个字符串传到后台但后台不能直接用,要解析,验证才好
      

  5.   

    这个检测只是过滤了没修改的值,其他值post上去以后当然还要验证了,这本来就是要做的事情,最起码服务器减轻了嘛,这样就能提高点效率,之前的代码我基本看懂了,我也想到应该可以改进而不需要手动添加radio的参数,你更新的代码应该已经解决这个问题了,呵呵呵
      

  6.   

    刚才没认真看楼主的意思,如果直接这样得到update语句的话的确感觉很危险,我的原意是想把整理后的用&连起来然后就可以ajax post到服务器了