1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/WeBank-WeBASE-Solidity-Security

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

МыБЭС-Солидити-Сикьюрити

Количество строк кода

1. Описание услуги безопасности контрактов

Услуга безопасности контрактов предоставляет интерфейсы для проверки безопасности.

Данный интерфейс принимает Base64-кодированный архив zip с контрактами, распаковывает его внутренне, анализирует и возвращает результат проверки обратно клиенту.

2. Интерфейсы безопасности контрактов

2.1. Интерфейс безопасности контрактов

Описание интерфейса

Используйте этот интерфейс для проверки безопасности контракта.

Входные данные: Base64-кодированный архив zip с контрактами (контракты должны находиться в папке contracts, имя файла должно совпадать с именем контракта, используйте "./xxx.sol" для ссылок на контракты. Упакуйте папку в zip-архив, назвав его номером бизнес-процесса (appid), затем закодируйте zip-архив в Base64).

Формат папки:

|- contracts
| |- Evidence.sol
| |- EvidenceFactory.sol
|- docs
| |- deploy.md

Выходные данные: информация о безопасности контракта (в формате JSON).

URL интерфейса

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

3.2 Установка сервиса WeBASE-Solidity-Security#### 3.2.1 Получение исходного кода

Выполните следующую команду:

git clone https://github.com/WeBankFinTech/WeBASE-Solidity-Security.git

Перейдите в директорию:

cd WeBASE-Solidity-Security

3.2.2 Компиляция кода

Используйте один из следующих методов для компиляции:

Метод 1: Если сервер уже имеет установленный Gradle версии 4.10 или выше

gradle build -x test

Метод 2: Если сервер не имеет установленного Gradle или версия ниже 4.10, используйте gradlew для компиляции

chmod +x ./gradlew && ./gradlew build -x test

После завершения сборки, скомпилированный код будет находиться в каталоге dist в корневом каталоге WeBASE-Solidity-Security.

3.2.3 Запуск и остановка сервиса

Перейдите в каталог 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/WeBank-WeBASE-Solidity-Security.git
git@api.gitlife.ru:oschina-mirror/WeBank-WeBASE-Solidity-Security.git
oschina-mirror
WeBank-WeBASE-Solidity-Security
WeBank-WeBASE-Solidity-Security
master