mcpField
U
Utah Salt Lab

Utah Salt Lab

本地服务
github.com/Utah-SaLT-Lab安全1137 周前更新

关于 Utah Salt Lab

Utah Salt Lab(README 中名为 Rethink_Sec_Code_Eval)是用于测试 SecCodePLT 生成代码的单元测试流程,面向安全代码生成评估,并建议在容器中运行。

主要功能

  1. 01生成代码的单元测试
  2. 02预处理并分发测试代码
  3. 03在容器中运行测试
  4. 04导出评估结果

适用场景

  1. 01评估生成的 SecCodePLT 解答
  2. 02测试受支持任务的提交代码
  3. 03隔离运行涉及安全操作的测试
  4. 04汇总单元测试结果

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Rethink_Sec_Code_Eval

对 SecCodePLT 生成的代码进行单元测试。

论文链接:https://arxiv.org/pdf/2503.15554?

目录结构

Rethink_Sec_Code_Eval
│   README.md
│   requirements.txt
|   Dockerfile   
│   ...
└───utils
│   │  SecPLT_func_name.json  
│  
│   
│   
└───Data
    │   results/
    │   summary/
│   └───unittest
|       └───000f5e47
│       │   setup.py
│       │   test_case.py
│

安装

⚠️ 由于代码可能包含 rm -rf 等安全相关操作,强烈建议在容器环境中运行测试。我们提供了用于构建容器的 Dockerfile。下面以使用 CharlieCloud 在容器中运行单元测试为例。你也可以使用 Docker 命令,因为我们提供了用于构建容器的 Dockerfile。

CharlieCloud 的默认镜像目录为 /tmp,可能会导致存储空间不足。为避免此问题,可以将目录设置为其他位置。

CH_IMAGE_STORAGE=/path/to/a/desired/place

如果使用 Charliecloud 时遇到问题,可以在这里找到一些解决方案:https://hpc.github.io/charliecloud/faq.html

  1. 构建容器
ch-image build -t test-runner -f Dockerfile .
  1. 安装软件包
pip install -r requirements.txt

代码生成

要生成代码,可以从原始的 SecCodePLT Hugging Face Space 下载指令提示词:https://huggingface.co/datasets/Virtue-AI-HUB/SecCodePLT。

⚠️ 请注意,原始 SecCodePLT 包含 1,345 个任务。不过,在生成单元测试并筛除存在问题的样本后,我们最终为 1,201 个样本生成了单元测试。因此,我们仅支持对这 1,201 个任务进行单元测试。受支持的任务 ID 可在 utils/SecPLT_func_name.json 中找到。

要运行单元测试,需要将生成的代码存储在 .jsonl 文件中,并遵循以下格式:

{"task_id": <id of the SecCodePLT sample>, "solution": <Generated Code>}

# Example:

{"task_id": "134f1a9c", "solution": def derive_hash(algorithm_name: str, input_data: bytes) -> bytes:...}
注意:

请根据所用模型选择正确的提示词模板(例如 ChatGPT 风格、CodeLLaMA 风格、Qwen 风格)。不同模型可能需要略有不同的提示词格式(例如,是否包含明确的函数签名、文档字符串或问题描述)。使用错误的提示词格式可能导致解决方案无效或不完整,进而无法通过预处理或单元测试。

预处理

运行单元测试前,请先运行预处理脚本,将代码分发到各个单元测试文件夹中

python preprocess.py --model <Any name you want> --file_path <path to the jsonl file that store the code>

# Example
python preprocess.py --model qwen --file_path code.jsonl

运行单元测试

sh run.sh <the name you just put after the --model>

#Example
sh run.sh qwen

获取结果

python get_result.py data/answer.json data/results/<the name you put after run.sh>_SecPLT_results.json --output <path to store the result>

# Example
python get_result.py data/answer.json data/results/qwen_SecPLT_results.json --output eval_result/qwen_eval_result.json

引用

@article{dai2025comprehensive,
  title={A Comprehensive Study of LLM Secure Code Generation},
  author={Dai, Shih-Chieh and Xu, Jun and Tao, Guanhong},
  journal={arXiv preprint arXiv:2503.15554},
  year={2025}
}

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。