查看原文
其他

阿里云怎么教坏ChatGPT写危险代码的​

马工在瑞典 瑞典马工 2023-11-09

摘要

阿里云在他们的范例中广泛地,长期地硬编码AccessKeyId和AccessKeySecret,我认为这种做法是很不负责任的,会误导很多初级开发者。ChatGPT就是被误导的受害人之一。

现象

如您所知,ChatGPT很适合帮助程序员写一些简单代码。我目前在开发一个个人爱好者项目,需要用到语音转文本功能。于是我就让ChatGPT帮我写了。

我用的指令是

写段python代码,把本地mp3文件上传给阿里云语音识别,然后取回识别文本,打印在console

ChatGPT 4.0的回复是

为了实现这个功能,你需要先安装阿里云的Python SDK,执行以下命令进行安装 pip install aliyun-python-sdk-core pip install aliyun-python-sdk-dyvmsapi

接下来,使用下面的Python代码实现上传本地MP3文件到阿里云的语音识别服务,获取识别结果并打印在控制台:

import jsonimport base64from aliyunsdkcore.client import AcsClientfrom aliyunsdkdyvmsapi.request.v20170525 import RecognizeSpeechRequest
# 省略部分代码,节省篇幅
def main(): access_key_id = "你的阿里云AccessKey ID" access_key_secret = "你的阿里云AccessKey Secret" client = AcsClient(access_key_id, access_key_secret, "cn-hangzhou")
file_path = "path/to/your/mp3file.mp3" recognized_text = recognize_speech(client, file_path) print("识别结果:", recognized_text)
if __name__ == "__main__": main()

我问ChatGPT:

你这个范例是参考了阿里云官方网站的范例吗?

它回答:

是的,这个范例参考了阿里云官方网站的示例代码。阿里云提供了Python SDK,可以帮助开发者更方便地调用阿里云的API服务。在这个示例中,我们使用了阿里云的语音识别服务,并通过Python SDK调用其API。(以下省略具体的代码解释)

如您所见,这个范例硬编码了“我的阿里云AccessKey ID"和"你的阿里云AccessKey Secret",假设我是一个初级程序员,我就被误导了。

但是我不是一个初级程序员,所以我很生气,责怪ChatGPT:

ok,所以你硬编码access key id和access key secret的做法,也是来自阿里云?因为你给我的aws范例没有这样做

ChatGPT马上意识到错误了:

抱歉给您带来困扰,您是对的。将Access Key ID和Access Key Secret直接硬编码在代码中并不是一种推荐的做法,因为这样可能导致这些凭据泄露。实际上,最佳实践是将这些敏感信息存储在环境变量或配置文件中。

以下是使用环境变量的一个改进示例:(以下省略)

我问它:

你以后会给其他用户回复同样的错误范例吗?

它像个外交官一样回答得很专业:

我会尽量避免在未来的回答中提供不安全或错误的范例。作为一个AI助手,我的目标是提供有用且安全的建议。我会继续学习和进步,以便更好地帮助您和其他用户。如果您发现我给出的示例或建议存在问题,请随时指出,这将有助于我改进并为您提供更好的帮助。谢谢您的反馈!

但是很不幸,只要换个session,它就忘记了刚才说的话,给出了同样错误的范例

import base64import jsonimport timeimport osfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.acs_exception.exceptions import ClientExceptionfrom aliyunsdkcore.acs_exception.exceptions import ServerExceptionfrom aliyunsdkdyvmsapi.request.v20170525 import SubmitTaskRequest
# 阿里云AccessKey ID和AccessKey Secretaccess_key_id = "your_access_key_id"access_key_secret = "your_access_key_secret"
# 初始化阿里云AcsClientclient = AcsClient(access_key_id, access_key_secret, "cn-shanghai")
# 以下省略

由此可见,经过几年的熏陶,ChatGPT被阿里云彻底教坏了,没法挽救。不知道读者中有多少资深程序员也有类似的经验:你mentor的小年轻已经被阿里云带坏了, 要花很大力气纠正过来。

晾晒

以下是一些阿里云的不良范例,

def main():
client = AcsClient( '<your-access-key-id>', # 您的AccessKey ID '<your-access-key-secret>', # 您的AccessKey Secret '<your-region-id>') # 您的地域ID eip = Eip(client) params = {} # 创建EIP

https://help.aliyun.com/document_detail/114803.html

if __name__ == "__main__": client = AcsClient('accessKeyId','accessSecret','cn-zhangjiakou',timeout = 35) vpc_quick_start = VpcQuickStart(client)
params = {}

https://help.aliyun.com/document_detail/114005.html

# -*- coding: utf8 -*-import jsonfrom urllib import quotefrom aliyunsdkcore.client import AcsClientfrom aliyunsdkmts.request.v20140618 import SubmitJobsRequestaccess_key_id = 'xxx'access_key_secret = 'xxx'

https://help.aliyun.com/document_detail/67664.html

# -*- coding: utf-8 -*-import oss2
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。# 填写Bucket名称。

https://help.aliyun.com/document_detail/88426.html

oss服务比较用心,在代码注释里“强烈建议”客户不使用root用户的AccessKeyId和AccessKeySecret,建议客户使用RAM用户缩减密码泄漏带来的危害,然后又毫不犹豫的在代码中硬编码AccessKeyId和AccessKeySecret。读起来简直有一种喜剧效果,感觉阿里云的朋友在讽刺什么。

顺便说一句,我看了他们四个python范例,就是四种不同的代码风格,这代码质量真的不敢恭维。

总结

云厂家自称是先进IT生产力的代表,就要有先进生产力的样子,在网络安全上给所有客户做出好的表率。硬编码密码到代码中多年以前就被归为不安全实践了,阿里云却还在大面积的推广,实在让人遗憾。尤其遗憾的是,像ChatGPT一样,大多数初级程序员从阿里云这里学到坏习惯之后,很难改正了。


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存