Услуга безопасности контрактов предоставляет интерфейсы для проверки безопасности.
Данный интерфейс принимает Base64-кодированный архив zip с контрактами, распаковывает его внутренне, анализирует и возвращает результат проверки обратно клиенту.
Используйте этот интерфейс для проверки безопасности контракта.
Входные данные: Base64-кодированный архив zip с контрактами (контракты должны находиться в папке contracts
, имя файла должно совпадать с именем контракта, используйте "./xxx.sol"
для ссылок на контракты. Упакуйте папку в zip-архив, назвав его номером бизнес-процесса (appid
), затем закодируйте zip-архив в Base64).
Формат папки:
|- contracts
| |- Evidence.sol
| |- EvidenceFactory.sol
|- docs
| |- deploy.md
Выходные данные: информация о безопасности контракта (в формате JSON).
http://localhost:5007/WeBASE-Solidity-Security/scan
HTTP POST
1) Таблица входных параметров| Номер | Входной параметр | Тип | Обязательность | Примечание | | ----- | ----------------------- | ------ | ------------- | ------------------------------------ | | 1 | appid | String | Нет | Номер приложения, используется для разделения контрактов | | 2 | contractSource | String | Нет | Base64-кодированный архив zip с контрактами |2) Формат данных
{
"appid": "appid001",
"contractSource": "UEsDBBQAAAAAACizbFAAAAAAAAAAAAAAAAAKAAAAY29udHJhY3RzL1BLAwQUAAAACAAIiGVQuSZqBJ0AAABvAQAAGAAAAGNvbnRyYWN0cy9IZWxsb1dvcmxkLnNvbIWOMQvCMBCF90L/w43tUiS4FXcnFwc3IbRnCCQXSa6CSP+7sakYpNo33r33vXf1UlkJwRdda77DedNsG9GWReeIvewY9miMOzlv+kdZQFRgr0kBSYttuuANieGIfIi3KvvXSwax5LgM1LF2BAq5qmN5YBkjHnnwFOZE/VqQNH/yFeMXKUTSuylPotWfsTQNSJpgO/qNE6s88R84PgFQSwMEFAAAAAAAE7NsUAAAAAAAAAAAAAAAAAUAAABkb2NzL1BLAwQKAAAAAADjgGxQ1Qj/mQkAAAAJAAAADgAAAGRvY3MvZGVwbG95Lm1kIyBEZXBsb3kKUEsBAj8AFAAAAAAAKLNsUAAAAAAAAAAAAAAAAoAJAAAAAAAAAAQAAAAAAAAAGNvbnRyYWN0cy8KACAAAAAAAAEAGACqQxwMevjVAapDHAx6+NUBEu2Y9Xn41QFQSwECPwAUAAAACAAIiGVQuSZqBJ0AAABvAQAAGAAkAAAAAAAAACAAAAAoAAAAY29udHJhY3RzL0hlbGxvV29ybGQuc29sCgAgAAAAAAABABgAselMfMzy1QF9ieU0evjVAapDHAx6+NUBUEsBAj8AFAAAAAAAE7NsUAAAAAAAAAAAAAAAAAUAJAAAAAAAAAAQAAAA+wAAAGRvY3MvCgAgAAAAAAABABgAa0Sa9Xn41QFrRJr1efjVARPSmfV5+NUBUEsBAj8ACgAAAAAA44BsUNUI/5kJAAAACQAAAA4AJAAAAAAAAAAgAAAAHgEAAGRvY3MvZGVwbG95Lm1kCgAgAAAAAAABABgAIBTBN0X41QFrRJr1efjVAWtEmvV5+NUBUEsFBgAAAAAEAAQAfQEAAFMBAAAAAA=="
}
1) Выходные параметры
Номер | Выводящий параметр | Тип | Может быть пустым | Примечание |
---|---|---|---|---|
1 | code | Int | Нет | Код возврата, 0: нормально, другие: ошибки |
2 | message | String | Да | Ошибка |
3 | data | Json | Да | Результат проверки |
а. Пример нормального возврата результатов проверки
{
"code": 0,
"message": null,
"data": {
"детекторы": [
{
"элементы": [
{
"маппинг_источника": {
"начальная_колонка": 1,
"конечная_колонка": 24,
"используемый_filename": "/WeBASE-Solidity-Security/dist/contracts/appid001/contracts/HelloWorld.sol",
"относительный_filename": "contracts/HelloWorld.sol",
"начало": 0,
"длина": 23,
"короткий_filename": "contracts/HelloWorld.sol",
"является_зависимостью": false,
"строки": [
1
],
"абсолютный_filename": "/WeBASE-Solidity-Security/dist/contracts/appid001/contracts/HelloWorld.sol"
},
"название": "^0.4.2",
"тип": "pragma",
"специфичные_поле_типа": {
"инструкция": [
"solidity",
"^",
"0.4",
".2"
]
}
}
],
"влияние": "Информационное",
"уверенность": "Высокая",
"markdown": "Версионный pragma [^0.4.2](contracts/HelloWorld.sol#L1) позволяет использовать старые версии\n",
"описание": "Версионный pragma ^0.4.2 (contracts/HelloWorld.sol#1) позволяет использовать старые версии\n",
"идентификатор": "b93b7ce0902076867f801a1b62ad7557d0305767e196372ed38c0d7076440c1e",
"проверка": "solc-version"
}
]
}
}
```б. Пример аномального возврата результатов проверки
```json
{
"code": 203003,
"message": "Обратный отладочный трасс [самого последнего вызова]:\n Файл \"/usr/local/lib/python3.6/dist-packages/crytic_compile/platform/solc.py\", строка 309, в _run_solc\n ret = json.loads(stdout)\n Файл \"/usr/lib/python3.6/json/__init__.py\", строка 354, в loads\n return _default_decoder.decode(s)\n Файл \"/usr/lib/python3.6/json/decoder.py\", строка 339, в decode\n obj, end = self.raw_decode(s, idx=_w(s, 0).end())\n Файл \"/usr/lib/python3.6/json/decoder.py\", строка 357, в raw_decode\n raise JSONDecodeError('Ожидаемое значение', s, err.value) from None\njson.decoder.JSONDecodeError: Ожидаемое значение: строка 1 столбец 1 (символ 0)\n\nПри обработке вышеупомянутой ошибки произошла другая ошибка:\n\nОбратный отладочный трасс (самого последнего вызова):\n"
}
Traceback (most recent call last):
В файле "__main__.py", строка 578, в функции main_impl
(slither_instances, results_detectors, results_printers, number_contracts) = process_all(filename, args, detector_classes, printer_classes)
В файле "/usr/local/lib/python3.6/dist-packages/slither/__main__.py", строка 60, в функции process_all
compilations = compile_all(target, **vars(args))
В файле "/usr/local/lib/python3.6/dist-packages/crytic_compile/crytic_compile.py", строка 1023, в функции compile_all
compilations.append(CryticCompile(filename, **kwargs))
В файле "/usr/local/lib/python3.6/dist-packages/crytic_compile/crytic_compile.py", строка 142, в конструкторе CryticCompile
self._compile(target, **kwargs)
В файле "/usr/local/lib/python3.6/dist-packages/crytic_compile/crytic_compile.py", строка 915, в функции _compile
self._platform.compile(self, target, **kwargs)
В файле "/usr/local/lib/python3.6/dist-packages/crytic_compile/platform/solc.py", строка 90, в функции compile
working_dir=solc_working_dir,
В файле "/usr/local/lib/python3.6/dist-packages/crytic_compile/platform/solc.py",
6/dist-packages/crytic_compile/platform/solc.py", строка 312, в функции _run_solc
raise InvalidCompilation(f"Неправильное компилирование solc {stderr}")
crytic_compile.platform.exceptions.InvalidCompilation: Неправильное компилирование solc /WeBASE-Solidity-Security/dist/contracts/appid003/contracts/HelloWorld.sol:6:16: Ошибка: ожидался ';' , но получен '('
functio get()constant returns(string){
^
contracts/HelloWorld.sol:6:16: Ошибка: ожидался ';' , но получен '('
functio get()constant returns(string){
^
**3. Возвратный код информации**| Код | сообщение | Описание |
| ---- | --------------------------------------------- | ------------------------------ |
| 0 | успех | Нормальное состояние |
| 103001 | система ошибки | Системное исключение |
| 103002 | параметр неваліден | Ошибка параметров |
| 203001 | В папке contracts нет файлов с расширением .sol | Отсутствие контрактов в папке contracts |
| 203002 | ошибка выполнения shell | Ошибка выполнения shell |
| 203003 | аномалия контракта | Аномалия проверки контракта |
## 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
После распаковки скопируйте исполняемые файлы в каталог /bin.
Проверьте успешность установки командой:
slither --version
Выполните следующую команду:
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
После завершения сборки, скомпилированный код будет находиться в каталоге dist
в корневом каталоге WeBASE-Solidity-Security
.
Перейдите в каталог dist
и выполните следующие команды:
Запуск: bash start.sh
Остановка: bash stop.sh
Проверка: bash status.sh
Примечание: После запуска процесса сервиса, необходимо проверить логи для подтверждения нормального запуска. Если в логах присутствует указанное содержимое, значит сервис запущен правильно; если сервис работает некорректно, после изменения конфигураций, при попытке запустить сервис, который уже запущен, сначала выполните stop.sh
, затем start.sh
.```
...
Application() - основной запуск завершен успешно...
#### 3.2.3 Просмотр журнала
Просмотр в директории `dist`:
журнал сервиса: tail -f log/WeBASE-Solidity-Security.log
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )