我知道很多人都问过这个问题,但不幸的是我找不到我的问题的正确答案。
在我读过的所有有关 SQL 注入的文章中,他们都讨论了 http://www.example.com/member.php?id=1等 URL ,以及如何检查我的网站是否容易受到 SQL 注入攻击(')。
就我而言,我的网站是这样的: http://www.example.com/Login.php 如您所见,我没有 ?id=1,我应该做什么来测试我的网站?
谢谢
我对JSF很新,并没有真正"习惯"不同的思维,所以我在努力(我假设)是基本的.
假设我有一个类User,它是一个会话bean.
假设我有10000个对象的控制器,比如Factory,它需要能够将它们中的一些设置为"锁定",在我们的例子中,它意味着"锁定"字段不再变为空,而是引用"LockedItem"宾语.
这是我无法工作的地方:LockedItem,当你实现它时,应该引用当前登录的用户.我该怎么做?
我尝试使用@managedproperty进行注入,但是在LockedItem.constructor中它是null(这是正常的我假设)然后我尝试了@PostConstruct方法,但是这个方法永远不会被调用(为什么?即使我把它变成了一个托管bean ...是只有在".xhtml"创建对象时调用的postconstruct方法?)或者我应该使用"java se"技巧,比如使用户静态?
代码澄清为什么没有调用@PostConstruct("Seat"之一):
.xhtml
<h:outputLabel id="user" value="Hello #{user.name}" />
<h:outputLabel id="car" value="you have #{car.brand}" />
Run Code Online (Sandbox Code Playgroud)
用户
package test;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class User implements Serializable {
private String name ;
public User()
{
name = "toto";
System.out.println("User constructor");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
汽车
package test;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
@ManagedBean
public class Car implements Serializable …Run Code Online (Sandbox Code Playgroud) jsf design-patterns code-injection postconstruct managed-bean
让我们说有一个简单的c#应用程序正在运行,以一个值为2的int的形式返回1 + 1的答案,我有它的源代码但是为了好奇,我想改变它的作用而不用在运行时修改dll.
是否可以使用您自己的.dll注入正在运行的应用程序,并将它在同一类和方法中返回的答案更改为除2之外的值?
我已经知道我可以在程序运行时进入内存并理论上将"2"的答案更改为其他内容,我很好奇我是否可以更改程序逻辑.
我也已经知道可以通过向应用程序注入另一个.dll和"添加"附加功能来"扩展"正在运行的应用程序,我对理论上可能更改已经在原始.dll中运行的代码感兴趣.
我在prestashop论坛上看到该函数Tools::getValue()没有逃避sql注入.现在我想知道当我想获取字符串或int值时如何从sql注入中阻止此函数?
有人能告诉我一些例子吗?
我有这个CacheAttribute接受这样的持续时间值
public class MyTestQuery : IMyTestQuery
{
private readonly ISomeRepository _someRepository;
public TestQuery(ISomeRepository someRepository)
{
_someRepository = someRepository;
}
[Cache(Duration = 10)]
public MyViewModel GetForeignKeysViewModelCache()
{
...code here...
return viewModel;
}
}
Run Code Online (Sandbox Code Playgroud)
属性看起来像这样
[AttributeUsage(AttributeTargets.Method)]
public class CacheAttribute : Attribute
{
public int Duration { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当使用Castle.Proxy.IInterceptor拦截时,它可以工作,但是当我通过IInitation.MethodInitationTarget或IInitation.Method执行Attribute.GetCustomAttribute时,两者都会返回null值
这是代码中的
public class CacheResultInterceptor : IInterceptor
{
public CacheAttribute GetCacheResultAttribute(IInvocation invocation)
{
var methodInfo = invocation.MethodInvocationTarget;
if (methodInfo == …Run Code Online (Sandbox Code Playgroud) 我将我的 DLL 注入到一个进程中,然后挂钩这样的函数:(recv)
BOOL HookFunction(LPCWSTR moduleName, LPCSTR funcName, LPVOID funcProxy,
unsigned char* lpBackup)
{
BYTE jmp[6] = { 0xe9,0x00,0x00,0x00,0x00,0xc3 };
DWORD funcAddr = (DWORD)GetProcAddress(GetModuleHandle(moduleName), funcName);
DWORD prev;
VirtualProtect((LPVOID)funcAddr, 6, PAGE_EXECUTE_READWRITE, &prev);
ReadProcessMemory(GetCurrentProcess(), (LPVOID)funcAddr, lpBackup, 6, NULL);
DWORD proxy = ((DWORD)funcProxy - funcAddr) - 5;
memcpy(&jmp[1], &proxy, 4);
memcpy((LPVOID)funcAddr, jmp, 6);
VirtualProtect((LPVOID)funcAddr, 6, prev, &prev);
FlushInstructionCache(GetCurrentProcess(), NULL, NULL);
return funcAddr;
}
// Hook
HookFunction(L"ws2_32.dll", "recv", (LPVOID*)nRecv, hookR);
Run Code Online (Sandbox Code Playgroud)
然后我附加了一个调试器,结果如下:
不过,有几件事我不明白,因为我仍在尝试理解和想象堆栈、堆等如何在调试器中协同工作。
BYTE jmp[6] = { 0xe9,0x00,0x00,0x00,0x00,0xc3 };
Run Code Online (Sandbox Code Playgroud)
我是否在这里替换指令,例如,用 0xe9 替换原始函数的“move, edi, …
我目前在我的项目中使用 dagger2 实现依赖注入,我偶然发现了一些东西,我对在 recyclerview 中处理 viewholder 时最好的方法是什么感到困惑。
通常,我们像这样创建视图持有者:
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int pos) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item, parent, false);
return new ViewHolder(view);
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,如何注入 ViewHolder?我应该注射它还是应该让它留在原处?
dependencies android dependency-injection code-injection dagger-2
我正在对其他开发人员的 bash 脚本进行质量检查。它看起来像这样:
#!/bin/bash
TERM=`cat ./termName.txt` || exit $?
./other-script.sh $TERM
Run Code Online (Sandbox Code Playgroud)
鉴于该TERM变量未在最后一行中引用,感觉恶意用户可以通过操纵 的内容来利用命令注入termName.txt,但是我证明这一点的基本尝试未能注入任何可执行命令。
我的问题是:
我真的很难扩展 shell-script 语法,因为它只突出显示 bash 内置命令。我想基本上突出显示 shell 命令,而不仅仅是内置命令。为此,我尝试通过注入来扩展语法,但这并没有很好的文档记录,因此无论我在做什么,我都一遍又一遍地遇到相同的问题。如果我注入一些命令以被识别为函数(并因此突出显示),它们是,但它们也在注释中突出显示,这非常烦人。无论我尝试了哪些组合,我都不会摆脱它。由于 support.function.extended.shell 令牌始终是注入的最高值,因此它始终是彩色的。有什么解决办法吗???
正如你在图片中看到的,像“echo”这样的内置命令在注释中没有着色,就像它应该是
{
"scopeName": "shellcommand.injection",
"injectionSelector": "L:source.shell -support.function.builtin.shell",
"patterns": [{
"include": "#shell-commands"
}],
"repository": {
"shell-commands": {
"patterns": [{
"match": "(?<=^|;|&|\\s)(systemctl|cp|sed|awk)(?=\\s|;|&|$)",
"name": "support.function.extended.shell"
}]
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后输出看起来像这样......
当我阅读如何在 awk 脚本中使用 shell 变量? 的答案时,我不确定如何正确编写使用 shell 变量的特定 awk 命令脚本。。
接受的答案演示了在命令中插入 shell 变量如何awk容易发生恶意代码注入,虽然我能够重现该演示,但我无法使用以下两个命令中的任何一个找到相同的问题:
#HWLINK=enp10s0
ip -o route | awk '/'$HWLINK'/ && ! /default/ {print $1}'
ip -o route | awk "/$HWLINK/"' && ! /default/ {print $1}'
Run Code Online (Sandbox Code Playgroud)
因此,主要问题是其中任何一个(或两个)是否容易受到攻击。
第二个问题是哪种形式是首选。我尝试过ip -o route | awk -v hwlink="$HWLINK" '/hwlink/ && ! /default/ {print $1}',但这不起作用。
ps这是一个重构;原来的命令是ip -o route | grep $HWLINK | grep -v default | awk '{print $1}'.
code-injection ×10
bash ×2
c# ×2
sql ×2
android ×1
autofac ×1
awk ×1
castle ×1
dagger-2 ×1
debugging ×1
dependencies ×1
dll ×1
grammar ×1
hook ×1
interception ×1
jsf ×1
linux ×1
managed-bean ×1
php ×1
prestashop ×1
security ×1
shell ×1
textmate ×1
windows ×1