在各种网站上,您经常在页面源中看到表单上的一些隐藏值(通常持有某种常量,键,ID等).就像是:
<input type="hidden" name="_submit_check" value="1">
Run Code Online (Sandbox Code Playgroud)
我假设这个网站是双重检查表单是通过检查_submit_checks值为1发布的.是否可以编辑源并将其更改为0,然后发布数据,从而使表单无法发布服务器端?
这个例子对服务器来说不是很危险,因为它会忽略请求,但使用隐藏字段是否存在任何可能的安全风险(除了明显的:他们仍然可以读取源中的值,我更担心如果他们可以编辑它).
在IMyMessage.cs中
public interface IMyMessage
{
}
Run Code Online (Sandbox Code Playgroud)
在IMyMessageReceiver.cs中
public interface IMyMessageReceiver<T> where T: IMyMessage
{
void HandleMessage(T message);
void Subscribe();
}
Run Code Online (Sandbox Code Playgroud)
在MyMessagePublisher.cs中
public static class MyMessagePublisher
{
private static Dictionary<Type, List<IMyMessageReceiver<IMyMessage>>> _subscribers;
static MyMessagePublisher
{
_subscribers = new Dictionary<Type, List<IMyMessageReceiver<IMyMessage>>>();
}
public static function Subscribe<T>(IMyMessageReceiver<T> receiver) where T: IMyMessage
{
Type messageType = typeof (T);
List<IMyMessageReceiver<IMyMessage>> listeners;
if(!_subscribers.TryGetValue(messageType, out listeners))
{
// no list found, so create it
List<IMyMessageReceiver<T>> newListeners = new List<IMyMessageReceiver<T>>();
// ERROR HERE: Can't convert List<IMyMessageReceiver<T>> to List<IMyMessageReceiver<IMyMessage>> …Run Code Online (Sandbox Code Playgroud)