<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如何消除VeraCode檢測中的SQL Injection Issue(CWE ID 89)

    Veracode是一個檢測應(yīng)用程序是否存在安全漏洞的工具,更多細節(jié)請訪問http://www.veracode.com

    這里主要總結(jié)一下如何消除Veracode檢測結(jié)果中的SQL Injection issue(CWE ID 89)

    首先,先看看VeraCode對SQL Injection Issue的定義:
    SQL Injection Description
    SQL injection vulnerabilities occur when data enters an application from an untrusted source and is used to dynamically
    construct a SQL query.  This allows an attacker to manipulate database queries in order to access, modify, or delete arbitrary data.  Depending on the platform, database type, and configuration, it may also be possible to execute administrative operations on the database, access the filesystem, or execute arbitrary system commands.  SQL injection attacks can also be used to subvert authentication and authorization schemes, which would enable an attacker to gain privileged access to restricted portions of the application.

    再瀏覽一下VeraCode對如何解決這個問題的建議:
    Recommendations
    Several techniques can be used to prevent SQL injection attacks. These techniques complement each other and address
    security at different points in the application. Using multiple techniques provides defense-in-depth and minimizes the likelihood
    of a SQL injection vulnerability.
    Use parameterized prepared statements rather than dynamically constructing SQL queries.  This will prevent the
    database from interpreting the contents of bind variables as part of the query and is the most effective defense against
    SQL injection.
    *
    Validate user-supplied input using positive filters (white lists) to ensure that it conforms to the expected format, using
    centralized data validation routines when possible.
    *
    Normalize all user-supplied data before applying filters or regular expressions, or submitting the data to a database. This
    means that all URL-encoded (%xx), HTML-encoded (&#xx;), or other encoding schemes should be reduced to the
    internal character representation expected by the application. This prevents attackers from using alternate encoding
    schemes to bypass filters.
    *
    When using database abstraction libraries such as Hibernate, do not assume that all methods exposed by the API will
    automatically prevent SQL injection attacks.  Most libraries contain methods that pass arbitrary queries to the database in an unsafe manner.


    通過對現(xiàn)有系統(tǒng)的實踐證明,對于這類SQL Injection Issue,消除時主要遵循以下幾個原則:

    1)優(yōu)先使用PreparedSQLStatement,使用它提供的占位符來填充SQL中的參數(shù)。

    2)因為PrepareSQLStatement只支持標準的SQL,對于某些數(shù)據(jù)庫廠商中中特殊的SQL語句,比如"init device xxxx"等就無能為力了。
    這是我們可以使用java.text.MessageFormat.format(query, params)來填充SQL的參數(shù)。
     1      public static String parseQuery( String query, Object[] params)
     2      {
     3          try
     4          {
     5              return MessageFormat.format(query, params);
     6          }
     7          catch( Exception e)
     8          {
     9              System.out.println(e);
    10              return null;
    11          }
    12      }


       3)Veracode會檢測傳入SQL的變量是否存在安全隱患(比如是否從文件中讀取的,或者是否從注冊表里讀取的),這種情況需要重新定義1個變量,然后將其傳入SQL語句中,看如下例子
          String sql = "create {0} for instance {1} on {2}  = ''{3}''";
           String executedSql 
    = parseQuery(sql,
                     
    new String[]{instance.getDbName(),
                                  instance.getName(),
                                  instance.getDeviceName(),                           
                                  instance.getDeviceSize(),
    });

        這里,instance是一個已經(jīng)存在的對象,如果它的變量是從文件中讀取的或者是依賴于程序外部的值,Veracode就認為存在安全隱患,因此我們需要做如下的調(diào)整:
     String dbName = FileUtil.removeControlCharacter(instance.getTempdbDbName());
           String instanceName 
    = FileUtil.removeControlCharacter(instance.getName());
           String devName 
    = FileUtil.removeControlCharacter(instance.getTempdbDeviceName());
           String executedSql 
    = parseSQLQuery(IConstants.CREATE_INSTANCE_SYS_TEMP_DB,
                     
    new String[]{dbName,instanceName,devName,deviceSize});
                    
        其中,F(xiàn)ileUtil.removeControlCharacter()的作用是刪除String變量中的控制符,目的就是對原有的String變量進行一次過濾后,賦值給新的變量,然后再傳給SQL語句。
    public static final String removeControlCharacter(String input)
        {
            
    if (input == null)
            {
                
    return "";
            }
            StringBuilder sb 
    = new StringBuilder();
            
    for (int i=0; i<input.codePointCount(0, input.length()); i++)
            {
                
    int codePoint = input.codePointAt(i);
                
    if(!Character.isISOControl(codePoint))
                {
                    sb.appendCodePoint(codePoint);
                }
            }
            
    return sb.toString();
        }   

    posted on 2011-09-05 14:09 想飛就飛 閱讀(2373) 評論(1)  編輯  收藏 所屬分類: J2EE

    評論

    # re: 如何消除VeraCode檢測中的SQL Injection Issue(CWE ID 89) 2011-11-24 19:27 liangO

    天,什么東西要求這么嚴格啊  回復(fù)  更多評論   

    公告


    導(dǎo)航

    <2011年11月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    統(tǒng)計

    常用鏈接

    留言簿(13)

    我參與的團隊

    隨筆分類(69)

    隨筆檔案(68)

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲无线码一区二区三区| 国产成人免费a在线资源| 亚洲欧洲日产v特级毛片| a级毛片黄免费a级毛片| 91麻豆国产自产在线观看亚洲| 色吊丝性永久免费看码| 亚洲乱码国产一区网址| 一级毛片免费全部播放| 久久久久国产成人精品亚洲午夜| 亚洲国产免费综合| 亚洲精品狼友在线播放| 日本免费污片中国特一级| 亚洲黄色中文字幕| 成年人视频在线观看免费| 亚洲av无码成人精品国产| 青青青国产色视频在线观看国产亚洲欧洲国产综合| 女bbbbxxxx另类亚洲| 亚洲色WWW成人永久网址| 91香蕉国产线观看免费全集| 亚洲va精品中文字幕| 又粗又大又长又爽免费视频| 国产成人精品免费大全| 中文字幕亚洲精品| 日韩视频在线免费| 国产一二三四区乱码免费| 亚洲视频手机在线| 热99re久久精品精品免费| 成人A毛片免费观看网站| 亚洲福利电影一区二区?| 日韩一级在线播放免费观看| aa在线免费观看| 亚洲一区二区三区91| 亚洲电影日韩精品| 最近中文字幕mv免费高清在线| 精品亚洲成A人无码成A在线观看| 99热在线精品免费播放6| 亚洲午夜在线播放| 国产亚洲精品无码专区| 日本高清在线免费| 免费的黄色的网站| 亚洲免费在线观看视频|