Услуга по обнаружению уязвимостей в контрактах Solidity предоставляет интерфейс для внешнего использования.
Этот интерфейс принимает zip-архив с файлами контрактов, закодированными в Base64, и после распаковки и анализа возвращает результаты проверки на уязвимости.
Интерфейс используется для проведения проверки контрактов на уязвимости.
Входные данные: zip-архив, содержащий файлы контрактов в папке contracts, имена файлов должны соответствовать именам контрактов. Файлы должны быть расположены в следующей структуре:
|- contracts
| |- Evidence.sol
| |- EvidenceFactory.sol
|- docs
| |- deploy.md
Архив должен быть назван в соответствии с бизнес-идентификатором appid. Затем архив кодируется в Base64.
http://localhost:5007/WeBASE-Solidity-Security/scan
HTTP POST
Таблица входных параметров
№ | Входной параметр | Тип | Обязателен | Примечание |
---|---|---|---|---|
1 | appid | String | Да | Бизнес-идентификатор, используется для различения контрактов |
2 | contractSource | String | Да | Zip-архив с контрактами, закодированный в Base64 |
Формат данных
{
"appid": "appid001",
"contractSource": "UEsDBBQAAAAAACizbFAAAAAAAAAAAAAAAAAKAAAAY29udHJhY3RzL1BLAwQUAAAACAAIiGVQuSZqBJ0AAABvAQAAGAAAAGNvbnRyYWN0cy9IZWxsb1dvcmxkLnNvbIWOMQvCMBCF90L/w43tUiS4FXcnFwc3IbRnCCQXSa6CSP+7sakYpNo33r33vXf1UlkJwRnda77DedNsG9GWReeIvewY9miMOzlv+kdZQFRgr0kBSYttuuANieGIfIi3KvvXSwax5LgM1LF2BAq5qmN5YBkjHnnwFOZE/VqQNH/yFeMXKUTSuylPotWfsTQNSJpgO/qNE6s88R84PgFQSwMEFAAAAAAAE7NsUAAAAAAAAAAAAAAAAAUAAABkb2NzL1BLAwQKAAAAAADjgGxQ1Qj/mQkAAAAJAAAADgAAAGRvY3MvZGVwbG95Lm1kIyBEZXBsb3kKUEsBAj8AFAAAAAAAKLNsUAAAAAAAAAAAAAAAAAoAJAAAAAAAAAAQAAAAAAAAAGNvbnRyYWN0cy8KACAAAAAAAAEAGACqQxwMevjVAapDHAx6+NUBEu2Y9Xn41QFQSwECPwAUAAAACAAIiGVQuSZqBJ0AAABvAQAAGAAkAAAAAAAAACAAAAAoAAAAY29udHJhY3RzL0hlbGxvV29ybGQuc29sCgAgAAAAAAABABgAselMfMzy1QF9ieU0evjVAapDHAx6+NUBUEsBAj8AFAAAAAAAE7NsUAAAAAAAAAAAAAAAAAUAJAAAAAAAAAAQAAAA+wAAAGRvY3MvCgAgAAAAAAABABgAa0Sa9Xn41QFrRJr1efjVARPSmfV5+NUBUEsBAj8ACgAAAAAA44BsUNUI/5kJAAAACQAAAA4AJAAAAAAAAAAgAAAAHgEAAGRvY3MvZGVwbG95Lm1kCgAgAAAAAAABABgAIBTBN0X41QFrRJr1efjVAWtEmvV5+NUBUEsFBgAAAAAEAAQAfQEAAFMBAAAAAA=="
}
Выходные параметры
Таблица выходных параметров
№ | Выходной параметр | Тип | Обязателен | Примечание |
---|---|---|---|---|
1 | code | Int | Да | Код результата: 0 — нормальный результат, другие значения — ошибка |
2 | message | String | Нет | Сообщение об ошибке |
3 | data | Json | Да | Результаты проверки |
a. Пример результатов успешной проверки
{
"code": 0,
"message": null,
"data": {
"detectors": [
{
"elements": [
{
"source_mapping": {
"starting_column": 1,
"ending_column": 24,
"filename_used": "/WeBASE-Solidity-Security/dist/contracts/appid001/contracts/HelloWorld.sol",
"filename_relative": "contracts/HelloWorld.sol",
"start": 0,
"length": 23,
"filename_short": "contracts/HelloWorld.sol",
"is_dependency": false,
"lines": [
1
],
"filename_absolute": "/WeBASE-Solidity-Security/dist/contracts/appid001/contracts/HelloWorld.sol"
},
"name": "^0.4.2",
"type": "pragma",
"type_specific_fields": {
"directive": [
"solidity",
"^",
"0.4",
".2"
]
}
}
],
"impact": "Informational",
"confidence": "High",
"markdown": "Pragma version[^0.4.2](contracts/HelloWorld.sol#L1) allows old versions\n",
"description": "Pragma version^0.4.2 (contracts/HelloWorld.sol#1) allows old versions\n",
"id": "b93b7ce0902076867f801a1b62ad7557d0305767e196372ed38c0d7076440c1e",
"check": "solc-version"
}
]
}
}
b. Пример результатов неудачной проверки
{
"code": 203003,
"message": "Traceback (most recent call last):\n File \"/usr/local/lib/python3.6/dist-packages/crytic_compile/platform/solc.py\", line 309, in _run_solc\n ret = json.loads(stdout)\n File \"/usr/lib/python3.6/json/__init__.py\", line 354, in loads\n return _default_decoder.decode(s)\n File
``` **3. Возвращаемые коды**
| Код | Сообщение | Описание |
| --- | --- | --- |
| 0 | success | Нормальное выполнение |
| 103001 | system error | Системная ошибка |
| 103002 | param valid fail | Ошибка параметров |
| 203001 | There is no sol files under contracts folder | В папке контрактов нет файлов Sol |
| 203002 | shell execute error | Ошибка выполнения в оболочке |
| 203003 | contracts abnormal | Аномалия в контрактах |
## 3. Установка сервиса
### 3.1 Предварительные условия
| Программное обеспечение | Версия |
|---|---|
| Java | JDK8 или выше |
| Python | 3.6+ |
| solc | 0.4.25 |
| slither | — |
#### Установка slither
Установите slither с помощью pip:
```bash
pip install slither-analyzer
В зависимости от версии контракта, который вы хотите проверить, установите компилятор контрактов solc. В этом примере используется версия 0.4.25. Загрузите и распакуйте файл, затем скопируйте исполняемый файл в каталог PATH.
curl -LO https://github.com/FISCO-BCOS/solidity/releases/download/v0.4.25/solc-linux.tar.gz
После успешной установки проверьте версию с помощью команды:
slither --version
Клонируйте код с GitHub:
git clone https://github.com/WeBankFinTech/WeBASE-Solidity-Security.git
Перейдите в каталог:
cd WeBASE-Solidity-Security
Скомпилируйте код одним из следующих способов: Способ 1: Если на сервере установлен Gradle и его версия не ниже 4.10, выполните команду:
gradle build -x test
Способ 2: Если Gradle не установлен или его версия ниже 4.10, используйте gradlew для компиляции:
chmod +x ./gradlew && ./gradlew build -x test
По завершении компиляции в корневом каталоге WeBASE-Solidity-Security будет создана папка dist с уже скомпилированным кодом.
Вернитесь в папку dist и выполните следующие команды:
Чтобы просмотреть журнал, перейдите в папку dist:
...
Application() - main run success...
You can comment after Login
Inappropriate content may be displayed here and will not be shown on the page. You can check and modify it through the relevant editing function
If you confirm that the content does not involve inappropriate language/advertisement redirection/violence/vulgar pornography/infringement/piracy/false/insignificant or illegal content related to national laws and regulations, you can click submit to make an appeal, and we will handle it as soon as possible.
Comments ( 0 )