completely remove native
This commit is contained in:
parent
d59b2b331a
commit
1ab8a7fceb
12 changed files with 0 additions and 280 deletions
121
.clang-format
121
.clang-format
|
@ -1,121 +0,0 @@
|
||||||
---
|
|
||||||
Language: Cpp
|
|
||||||
# BasedOnStyle: LLVM
|
|
||||||
AccessModifierOffset: -2
|
|
||||||
AlignAfterOpenBracket: Align
|
|
||||||
AlignConsecutiveAssignments: false
|
|
||||||
AlignConsecutiveDeclarations: false
|
|
||||||
AlignEscapedNewlines: Right
|
|
||||||
AlignOperands: true
|
|
||||||
AlignTrailingComments: true
|
|
||||||
AllowAllParametersOfDeclarationOnNextLine: true
|
|
||||||
AllowShortBlocksOnASingleLine: false
|
|
||||||
AllowShortCaseLabelsOnASingleLine: false
|
|
||||||
AllowShortFunctionsOnASingleLine: All
|
|
||||||
AllowShortIfStatementsOnASingleLine: false
|
|
||||||
AllowShortLoopsOnASingleLine: false
|
|
||||||
AlwaysBreakAfterDefinitionReturnType: None
|
|
||||||
AlwaysBreakAfterReturnType: None
|
|
||||||
AlwaysBreakBeforeMultilineStrings: false
|
|
||||||
AlwaysBreakTemplateDeclarations: MultiLine
|
|
||||||
BinPackArguments: true
|
|
||||||
BinPackParameters: true
|
|
||||||
BraceWrapping:
|
|
||||||
AfterClass: false
|
|
||||||
AfterControlStatement: false
|
|
||||||
AfterEnum: false
|
|
||||||
AfterFunction: false
|
|
||||||
AfterNamespace: false
|
|
||||||
AfterObjCDeclaration: false
|
|
||||||
AfterStruct: false
|
|
||||||
AfterUnion: false
|
|
||||||
AfterExternBlock: false
|
|
||||||
BeforeCatch: false
|
|
||||||
BeforeElse: false
|
|
||||||
IndentBraces: false
|
|
||||||
SplitEmptyFunction: true
|
|
||||||
SplitEmptyRecord: true
|
|
||||||
SplitEmptyNamespace: true
|
|
||||||
BreakBeforeBinaryOperators: None
|
|
||||||
BreakBeforeBraces: Attach
|
|
||||||
BreakBeforeInheritanceComma: false
|
|
||||||
BreakInheritanceList: BeforeColon
|
|
||||||
BreakBeforeTernaryOperators: true
|
|
||||||
BreakConstructorInitializersBeforeComma: false
|
|
||||||
BreakConstructorInitializers: BeforeColon
|
|
||||||
BreakAfterJavaFieldAnnotations: false
|
|
||||||
BreakStringLiterals: true
|
|
||||||
ColumnLimit: 80
|
|
||||||
CommentPragmas: '^ IWYU pragma:'
|
|
||||||
CompactNamespaces: false
|
|
||||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
|
||||||
ConstructorInitializerIndentWidth: 4
|
|
||||||
ContinuationIndentWidth: 4
|
|
||||||
Cpp11BracedListStyle: true
|
|
||||||
DerivePointerAlignment: false
|
|
||||||
DisableFormat: false
|
|
||||||
ExperimentalAutoDetectBinPacking: false
|
|
||||||
FixNamespaceComments: true
|
|
||||||
ForEachMacros:
|
|
||||||
- foreach
|
|
||||||
- Q_FOREACH
|
|
||||||
- BOOST_FOREACH
|
|
||||||
IncludeBlocks: Preserve
|
|
||||||
IncludeCategories:
|
|
||||||
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
|
||||||
Priority: 2
|
|
||||||
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
|
|
||||||
Priority: 3
|
|
||||||
- Regex: '.*'
|
|
||||||
Priority: 1
|
|
||||||
IncludeIsMainRegex: '(Test)?$'
|
|
||||||
IndentCaseLabels: false
|
|
||||||
IndentPPDirectives: None
|
|
||||||
IndentWidth: 2
|
|
||||||
IndentWrappedFunctionNames: false
|
|
||||||
JavaScriptQuotes: Leave
|
|
||||||
JavaScriptWrapImports: true
|
|
||||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
|
||||||
MacroBlockBegin: ''
|
|
||||||
MacroBlockEnd: ''
|
|
||||||
MaxEmptyLinesToKeep: 1
|
|
||||||
NamespaceIndentation: None
|
|
||||||
ObjCBinPackProtocolList: Auto
|
|
||||||
ObjCBlockIndentWidth: 2
|
|
||||||
ObjCSpaceAfterProperty: false
|
|
||||||
ObjCSpaceBeforeProtocolList: true
|
|
||||||
PenaltyBreakAssignment: 2
|
|
||||||
PenaltyBreakBeforeFirstCallParameter: 19
|
|
||||||
PenaltyBreakComment: 300
|
|
||||||
PenaltyBreakFirstLessLess: 120
|
|
||||||
PenaltyBreakString: 1000
|
|
||||||
PenaltyBreakTemplateDeclaration: 10
|
|
||||||
PenaltyExcessCharacter: 1000000
|
|
||||||
PenaltyReturnTypeOnItsOwnLine: 60
|
|
||||||
PointerAlignment: Right
|
|
||||||
ReflowComments: true
|
|
||||||
SortIncludes: true
|
|
||||||
SortUsingDeclarations: true
|
|
||||||
SpaceAfterCStyleCast: false
|
|
||||||
SpaceAfterTemplateKeyword: true
|
|
||||||
SpaceBeforeAssignmentOperators: true
|
|
||||||
SpaceBeforeCpp11BracedList: false
|
|
||||||
SpaceBeforeCtorInitializerColon: true
|
|
||||||
SpaceBeforeInheritanceColon: true
|
|
||||||
SpaceBeforeParens: ControlStatements
|
|
||||||
SpaceBeforeRangeBasedForLoopColon: true
|
|
||||||
SpaceInEmptyParentheses: false
|
|
||||||
SpacesBeforeTrailingComments: 1
|
|
||||||
SpacesInAngles: false
|
|
||||||
SpacesInContainerLiterals: true
|
|
||||||
SpacesInCStyleCastParentheses: false
|
|
||||||
SpacesInParentheses: false
|
|
||||||
SpacesInSquareBrackets: false
|
|
||||||
Standard: Cpp11
|
|
||||||
StatementMacros:
|
|
||||||
- Q_UNUSED
|
|
||||||
- QT_REQUIRE_VERSION
|
|
||||||
TabWidth: 8
|
|
||||||
UseTab: Never
|
|
||||||
...
|
|
||||||
|
|
0
.gitmodules
vendored
0
.gitmodules
vendored
|
@ -1,12 +0,0 @@
|
||||||
cmake_minimum_required(VERSION 3.0)
|
|
||||||
project(angel_security)
|
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_dart_utils/cmake")
|
|
||||||
find_package(Dart REQUIRED)
|
|
||||||
include_directories(libinjection/src)
|
|
||||||
add_subdirectory(libinjection/src)
|
|
||||||
add_dart_native_extension(angel_security_native lib/src/native/angel_security.c)
|
|
||||||
target_link_libraries(angel_security_native injection)
|
|
||||||
install(TARGETS angel_security_native injection
|
|
||||||
ARCHIVE DESTINATION "${CMAKE_CURRENT_LIST_DIR}/lib/src/native"
|
|
||||||
LIBRARY DESTINATION "${CMAKE_CURRENT_LIST_DIR}/lib/src/native")
|
|
|
@ -1,29 +0,0 @@
|
||||||
import 'package:angel_framework/angel_framework.dart';
|
|
||||||
import 'package:angel_framework/http.dart';
|
|
||||||
import 'package:angel_security/native.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
|
||||||
import 'package:pretty_logging/pretty_logging.dart';
|
|
||||||
|
|
||||||
main() async {
|
|
||||||
// Logging boilerplate.
|
|
||||||
Logger.root.onRecord.listen(prettyLog);
|
|
||||||
|
|
||||||
// Create an app, and HTTP driver.
|
|
||||||
var app = Angel(logger: Logger('rate_limit')), http = AngelHttp(app);
|
|
||||||
|
|
||||||
// Filter out SQL injections from the query. On every GET request,
|
|
||||||
// print out the query parameters (as JSON).
|
|
||||||
app
|
|
||||||
..fallback(sqliFilterQuery)
|
|
||||||
..get('/', (req, res) => req.queryParameters)
|
|
||||||
..fallback((req, res) => throw AngelHttpException.notFound());
|
|
||||||
|
|
||||||
// Start the server.
|
|
||||||
await http.startServer('127.0.0.1', 3000);
|
|
||||||
print('SQLi filtering example listening at ${http.uri}');
|
|
||||||
|
|
||||||
var exampleUri = http.uri.replace(queryParameters: {
|
|
||||||
'id': "-1' and 1=1 union/* foo */select load_file('/etc/passwd')--"
|
|
||||||
});
|
|
||||||
print('Example URI: $exampleUri');
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
export 'src/native/native.dart';
|
|
|
@ -1,61 +0,0 @@
|
||||||
#include <dart_api.h>
|
|
||||||
#include <libinjection.h>
|
|
||||||
#include <libinjection_sqli.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
Dart_NativeFunction ResolveName(Dart_Handle name, int argc,
|
|
||||||
bool *auto_setup_scope);
|
|
||||||
|
|
||||||
DART_EXPORT Dart_Handle angel_security_native_Init(Dart_Handle parent_library) {
|
|
||||||
if (Dart_IsError(parent_library))
|
|
||||||
return parent_library;
|
|
||||||
|
|
||||||
Dart_Handle result_code =
|
|
||||||
Dart_SetNativeResolver(parent_library, ResolveName, NULL);
|
|
||||||
if (Dart_IsError(result_code))
|
|
||||||
return result_code;
|
|
||||||
|
|
||||||
return Dart_Null();
|
|
||||||
}
|
|
||||||
|
|
||||||
Dart_Handle HandleError(Dart_Handle handle) {
|
|
||||||
if (Dart_IsError(handle))
|
|
||||||
Dart_PropagateError(handle);
|
|
||||||
return handle;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Angel_Security_IsSqli(Dart_NativeArguments arguments) {
|
|
||||||
const char *text;
|
|
||||||
Dart_Handle textHandle = Dart_GetNativeArgument(arguments, 0);
|
|
||||||
HandleError(Dart_StringToCString(textHandle, &text));
|
|
||||||
|
|
||||||
struct libinjection_sqli_state state;
|
|
||||||
libinjection_sqli_init(&state, text, strlen(text), FLAG_NONE);
|
|
||||||
int is_sqli = libinjection_is_sqli(&state);
|
|
||||||
|
|
||||||
// Return list
|
|
||||||
Dart_Handle outHandle = Dart_NewList(2);
|
|
||||||
if (is_sqli != 0) {
|
|
||||||
HandleError(Dart_ListSetAt(outHandle, 0, Dart_NewBoolean(true)));
|
|
||||||
HandleError(Dart_ListSetAt(outHandle, 1,
|
|
||||||
Dart_NewStringFromCString(state.fingerprint)));
|
|
||||||
} else {
|
|
||||||
HandleError(Dart_ListSetAt(outHandle, 0, Dart_NewBoolean(false)));
|
|
||||||
HandleError(Dart_ListSetAt(outHandle, 1, Dart_Null()));
|
|
||||||
}
|
|
||||||
Dart_SetReturnValue(arguments, outHandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
Dart_NativeFunction ResolveName(Dart_Handle name, int argc,
|
|
||||||
bool *auto_setup_scope) {
|
|
||||||
if (!Dart_IsString(name))
|
|
||||||
return NULL;
|
|
||||||
Dart_NativeFunction result = NULL;
|
|
||||||
const char *cname;
|
|
||||||
HandleError(Dart_StringToCString(name, &cname));
|
|
||||||
|
|
||||||
if (strcmp("Angel_Security_IsSqli", cname) == 0)
|
|
||||||
result = Angel_Security_IsSqli;
|
|
||||||
return result;
|
|
||||||
}
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,3 +0,0 @@
|
||||||
import 'dart-ext:angel_security_native';
|
|
||||||
import 'package:angel_framework/angel_framework.dart';
|
|
||||||
part 'sqli.dart';
|
|
|
@ -1,39 +0,0 @@
|
||||||
part of 'native.dart';
|
|
||||||
|
|
||||||
List _isSqli(String text) native "Angel_Security_IsSqli";
|
|
||||||
|
|
||||||
/// Using `libinjection`, determines whether a string contains
|
|
||||||
/// a SQL injection.
|
|
||||||
LibInjectionScore sqlInjectionScore(String text) {
|
|
||||||
var result = _isSqli(text);
|
|
||||||
return LibInjectionScore(result[0] as bool, result[1] as String);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Uses `libinjection` to filter out possible SQL injections from the
|
|
||||||
/// query parameters ([RequestContext.queryParameters]).
|
|
||||||
///
|
|
||||||
/// Note: This is *destructive*, and modifies the query parameter map,
|
|
||||||
/// instead of returning new data.
|
|
||||||
bool sqliFilterQuery(RequestContext req, ResponseContext res) {
|
|
||||||
var out = <String, dynamic>{};
|
|
||||||
req.queryParameters.forEach((k, v) {
|
|
||||||
if (v is! String) {
|
|
||||||
out[k] = v;
|
|
||||||
} else {
|
|
||||||
var score = sqlInjectionScore(v as String);
|
|
||||||
if (!score.isInjection) {
|
|
||||||
out[k] = v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
req.queryParameters..clear()..addAll(out);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
class LibInjectionScore {
|
|
||||||
final bool isInjection;
|
|
||||||
final String signature;
|
|
||||||
|
|
||||||
LibInjectionScore(this.isInjection, [this.signature]);
|
|
||||||
}
|
|
14
security.iml
14
security.iml
|
@ -1,14 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module type="WEB_MODULE" version="4">
|
|
||||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
|
||||||
<exclude-output />
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.pub" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
<orderEntry type="library" name="Dart SDK" level="project" />
|
|
||||||
<orderEntry type="library" name="Dart Packages" level="project" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
Loading…
Reference in a new issue