Hypnotoad会写任何日志文件吗?我在这里找不到任何相关内容:http://mojolicio.us/perldoc/Mojo/Server/Hypnotoad
此外该选项--help也没有说明.
我理解,应用程序方面我需要使用像$self->app->log->error('aua!')......这样的服务器日志之类的东西不存在?(例如客户请求,内部错误等)
如果答案是否定的,我很好.这就意味着,我想我需要在我的应用程序中实现这一点.我可以想象,在这里保持服务器代码小一些是有道理的,也许这就是缺乏这种功能的原因?还是我可以启用它?
我正在寻找一个简洁的例子,说明如何在"Mojolicious"应用程序中使用"under"功能.我发现的所有例子都涉及"Mojolicious :: Lite"(我不使用).例如,我在这里听了http://mojocasts.com/e3的截屏视频,我想我理解了功能不足的概念.但我不使用"Mojolicious :: Lite",所以似乎我不能直接按照这个例子.我一直未能尝试采用Lite-example的非Lite风格.(这可能也是因为我仍然是框架的新手)
相关代码如下所示:
# Router
my $r = $self->routes;
# Normal route to controller
$r->get('/') ->to('x#a');
$r->get('/y')->to('y#b');
$r->any('/z')->to('z#c');
Run Code Online (Sandbox Code Playgroud)
因此,所有这些路由都需要通过user/pass保护.我试着这样做:
$r->under = sub { return 1 if ($auth) };
Run Code Online (Sandbox Code Playgroud)
但这不编译,我只是找不到匹配这个代码风格的例子......任何人都可以给我正确的提示或链接吗?请原谅我,如果这是在文档的某个地方...他们可能是完整的,但他们缺乏像我这样的简单头脑的人可以理解的例子:-P
最后提出的问题,首先是对该问题的详细描述以及我已经测试过的内容
我正在编写一些代码,向其他人展示一些基本原理。该代码永远不会有效,并且旨在简化。
我的目标(从他人那里来的应用程序)是编写一个使用Web证书加密其网络流量的简单应用程序。
起点是不加密的应用程序:
#!/usr/bin/env perl
use strict;
use warnings;
use IO::Socket::INET;
# auto-flush on socket
$| = 1;
# creating a listening socket
my $socket = new IO::Socket::INET (
LocalAddr => '0.0.0.0', # local server address
LocalPort => '7777', # local server port
Listen => 5, # queue size for connections
Proto => 'tcp', # protocol used
);
die "cannot create socket $!\n" unless $socket;
print "server waiting for client connection on port 7777\n";
while(1)
{
# …Run Code Online (Sandbox Code Playgroud) 为了防止 SQL 注入,建议使用带有绑定值的准备好的语句。这确保了数据库可以区分 SQL 中的实际逻辑(必须被解析、解释和优化)和数据(不需要解释),因此不会解释和执行在数据中找到的命令.
另一种实现某种保护的方法是使用转义库,它可以解除数据中的重要字符,这样它们就不会被解释。
在我看来,通常建议使用带有绑定参数的准备好的语句而不是转义输入。例如,带有绑定值的准备好的语句确实在循环中具有一些性能优势。
我的问题:是否有任何安全原因更喜欢带有绑定值的准备语句而不是转义?如果是,确切原因是什么?
我可能会想到的一个原因是“转义很棘手”并且转义库需要与数据库功能完全匹配……还有什么?
该文档中capurex,指出该功能从未调用外壳。
我的假设:
由于没有调用 shell,字符喜欢*或;不会被解释,因此不会造成伤害。这就是为什么调用外部程序不会(或不太容易)受到意外格式错误的输入或预期注入攻击的影响,如下例所示(抱歉,德语输出消息):
use v5.26;
use IPC::System::Simple 'capturex';
# (very) vulnerable to shell injection
say `ls @ARGV`;
# just a visual line
say '----------';
# no shell injection "possible" (?)
say capturex('ls', @ARGV);
Run Code Online (Sandbox Code Playgroud)
输出:
user@host:-$ perl shell-injection.pl -1 \*.pl \; hostname
shell-injection.pl
host
----------
ls: Zugriff auf '*.pl' nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf ';' nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf …Run Code Online (Sandbox Code Playgroud) 从__DATA__Perl 的数据部分读取它非常容易.以下代码使用预先存在的DATA句柄:
foreach (<DATA>) {
print("- $_");
}
__DATA__
1
2
The End of The End
Run Code Online (Sandbox Code Playgroud)
生产:
- 1
- 2
- The End of The End
Run Code Online (Sandbox Code Playgroud)
但是我没有找到任何编写数据的简洁方法.例如,我尝试过以下方法:
use feature say;
say STDERR 'Some Error';
say STDOUT 'Some Message';
say DATA 'Some Data';
__DATA__
foo bar
Run Code Online (Sandbox Code Playgroud)
打印到STDOUT和STDERR作为expectet:
perl write.pl 2> /dev/null
Some Message
Run Code Online (Sandbox Code Playgroud)
但印刷品DATA什么都不做:
tail -2 write.pl
__DATA__
foo bar
Run Code Online (Sandbox Code Playgroud)
我也看过CPAN的几个模块,但我总是只找到读取支持,而不是写入.感谢任何提示和帮助!
我在 Ubuntu 18.04 的全新安装中使用了一些我去年已经使用过的 Perl 代码。IO::Prompter正如您在示例中看到的那样,由于“某些”原因,星星没有正确回声。
user@host:~$ sudo cpan install IO::Prompter
IO::Prompter is up to date (0.004015).
user@host:~$ perl -MIO::Prompter -E 'say prompt "foo: ", -echo=>"*"'
foo: topSecret
topSecret
user@host:~$ perl --version
This is perl 5, version 26, subversion 1 (v5.26.1) built for x86_64-linux-gnu-thread-multi
Run Code Online (Sandbox Code Playgroud)
我在看什么?我在这个新的 VM 中没有“花哨的”设置。刚刚通过安装缺少的库cpan并使用随附的系统 perl。
任何帮助表示赞赏。还有替代模块建议。
我的代码看起来像这样:
my @street = qw(
examplestreet
example street
);
foreach my $str (@street) {
print "$str\n";
}
Run Code Online (Sandbox Code Playgroud)
输出很明显
examplestreet
example
street
Run Code Online (Sandbox Code Playgroud)
但我希望它是
examplestreet
example street
Run Code Online (Sandbox Code Playgroud)
问题:我可以修改qw()so 的行为,它只用换行符分隔,而不是用空格分隔吗?
Ps:
为什么我这样做:获得了大量条目,最简单的方法就是将它们逐行复制粘贴到代码中.这只是一个小小的剪辑,不值得任何努力.如果我找不到解决方案,我将为数据制作单独的文件并将其读入脚本.但捷径会很棒!(或者我应该尝试一下__DATA__吗?不知道如何实现这一点......)当前的Perl是v5.20.1
我可以使用Bash执行以下操作:
for i in 1 2 3 4
do
# Do some operations on $i
print $i
done
Run Code Online (Sandbox Code Playgroud)
我可以在Perl中做类似的事情而不将值存储在数组中吗?