AWS CodeWhisper概述

Amazon CodeWhisperer 是一种采用机器学习(ML)的服务,可以根据开发人员用自然语言编写的注释和集成式开发环境(IDE)中的代码生成代码建议,帮助开发人员提高工作效率,可以为您的应用程序提供代码审查、安全扫描和性能优化。

Amazon CodeWhisperer 为多种编程语言提供基于人工智能(AI)的代码建议,包括 Python、Java、JavaScript、TypeScript、C#、Go、Rust、PHP、Ruby、Kotlin、C、C++、Shell 脚本、SQL 和 Scala。您可以使用来自多个 IDE 的服务,包括 JetBrains IDE(IntelliJ IDEA、PyCharm、WebStorm 和 Rider)、Visual Studio(VS)Code、AWS Cloud9 和 AWS Lambda 控制台。

内置代码安全扫描功能:(这是 copilot暂时还不支持的功能)

使用 CodeWhisperer,您可以扫描 Java、JavaScript 和 Python 项目以检测难以发现的漏洞,例如开放全球应用程序安全项目(OWASP)中排名前十的漏洞,或者不符合加密库最佳实践及其他类似安全最佳实践的漏洞。该服务分析 IDE 中的现有代码(无论是由 CodeWhisperer 生成还是由您编写),高度精确地识别有问题的代码,并对如何修复代码提供明智的建议。

开始使用AWS CodeWhisper

以visual studio code studio为例

  • 安装 AWS Toolkit插件
    • 安装好后,点击链接AWS。选择使用:

    Use a personal to sign in with AWS Builder ID

    • 复制 code,并跳转指定网址,粘贴对应code
    • 根据指引,创建AWS Builder ID后,选择允许 VSCode 访问你的数据
    • 然后就可以正常使用了!

    AWS CodeWhisper的特性

    代码自动生成

    • 通过注释生成代码
    • CodeWhisper会扫描上下文,自动生成对应代码:输入 method 的定义: def bubble_sort(nums),后续内容就可以自动生成
    • 协助生成对应的测试用例:
    • 还可以指定不同类型的测试用例:

    代码安全扫描

    以如下代码为例:

    # write a function to query data from mysql
    import mysql.connector
    
    def query_data(conditoin):
        db = mysql.connector.connect(
            host="localhost",
            user="XXXX",
            password="XXXX",
            database="XXXX"
            )
        query = "Select * from user where name = '" + conditoin+"'"
        cursor = db.cursor()
        cursor.execute(query)
        result = cursor.fetchall()
        return result
    

    看一下 CodeWhisper的代码扫描的结果吧!

    它扫描到了如下问题:

    1. mysql.connector的包没有安装
    2. CWE-400,664 – 资源泄漏:分配的资源未正确释放。这可能会使您的系统变慢或崩溃。必须在所有路径上关闭它们以防止资源泄漏。
    3. CWE-798 – 硬编码凭证:访问凭证(如密码和访问密钥)不应该在源代码中进行硬编码。硬编码凭证可能会在删除后仍然导致泄漏。这是因为版本控制系统可能会保留旧版本的代码。凭证应安全地存储并从运行时环境中获取。
    4. CWE-89 – SQL 注入:必须在使用用户提供的输入生成 SQL 数据库查询之前对其进行净化。攻击者可以创建和使用不受信任的输入来运行查询语句,从而读取、修改或删除数据库内容。

    上述内容,虽然对与一个高级工程师来说,都是小意思。但多少可以解决一些小白工程师的基本问题!

    很棒吧,赶紧试试,最重要的是,AWS CodeWhisper 是宣布对个人开发者永久免费哦!

    最后修改日期: 2023年9月16日

    留言

    撰写回覆或留言

    发布留言必须填写的电子邮件地址不会公开。