我最近对我工作的其中一个站点进行了安全审计.这是通过Acunetix Web漏洞扫描程序完成的.这回来了一堆我正在整理的结果.
很多关于XSS的点击率都出现了,但我不确定它们是否是误报.
代码如:
if(isset($_GET['variableNameX']))
$var_to_use_in_app = mysql_escape_string(trim($_GET['variableNameX']));
Run Code Online (Sandbox Code Playgroud)
回来对XSS开放.任何带有查询字符串的页面都会回来,因为它可能对XSS开放,或者它是否足够聪明,知道我正在处理这个服务器端?
谢谢您的帮助.
如果我的网站上线(不认为它会,它只是一个学习练习).
我一直在使用mysql_real_escape_string(); 来自POST,SERVER和GET的数据.另外,我一直在使用intval(); 在必须只是数字的字符串上.
我认为这包括我从sql注入?正确?我可以做更多吗?
但是,我不确定它是如何提供的(如果它提供任何保护)来自XSS注射?
有关如何打击这两种攻击形式的更多信息,我们表示赞赏.
我需要设置一个cookie来保持用户登录状态.我要哈希用户名,密码和IP.我的代码:
login process:
$hashed = md5($username.$pwd.IP);
setcookie('userstate', $username.':'.$hashed);
restore user state:
$vars = split(':', $_COOKIE['userstate']);
pseudo: get user with username in $vars[0]
$hashed = md5($username.$pwd.IP);
if($hashed == $vars[1]) return true;
else return false;
Run Code Online (Sandbox Code Playgroud)
这种方式对XSS攻击安全吗?
我们的中间层需要做一些事情来防止</script>在javascript字符串中逐字出现.例如,在所有浏览器中,HTML解析器在其第一次传递中将忽略javascript上下文,请参阅第一个关闭脚本,然后查看垃圾,然后查看第二个关闭脚本.请参阅:using-script-in-a-javascript-literal
<HTML>
<BODY>
start
<SCRIPT>
alert( "</SCRIPT>" );
</SCRIPT>
finish
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
我解决这个问题的第一个想法是将我们为javascript字符串转义的字符扩展为包含">"和"<" - 这似乎适用于我测试的浏览器,但看起来并不符合标准:escapesequence.shtml
编辑:此规则专门用于呈现为javascript字符串文字的内容.
为什么CodeIgniter的XSS过滤器只通过特定事物的正则表达式做出反应,而不是首先清理所有输入,无论内容是否被污染?另外,为什么在输入期间而不是在输出上完成(就像它应该是?)
我们目前正在使用OWASP Antisamy项目来保护我们的应用程序免受XSS攻击.当任何给定表单提交给服务器时,每个输入字段都被清理.它工作正常,但我们在公司名称,组织名称等字段方面存在问题.
例如:Ampersand为AT&T进行转义,公司名称显示错误(显示转义字符).
我们手动更新数据库中的字段以解决此问题.然而,你可以想象这是一个痛苦的脖子.
有没有办法使用OWASP反歧视来解决这个问题,还是应该使用不同的库?
考虑下面的代码将json字符串从php发送到js,
<?php
$str = "<!--<script>"; // This is from user input
?>
<script>
var json_str = <?= json_encode($str) ?>;
</script>
Run Code Online (Sandbox Code Playgroud)
该字符串将破坏HTML,解决它的方法是通过旧学校评论黑客,例如
<script>
<!--
var json_str = <?= json_encode($str) ?>;
//-->
</script>
Run Code Online (Sandbox Code Playgroud)
还有其他选择吗?
我正在测试一些前端代码,我可以看到使用{{}}处理程序栏输入的代码,所以如果我输入了一个输入=&123,那么这不应该转换为&123然后存储在服务器中,因为两个双小胡子意味着像'&'这样的字符被转义.当我查看发送到服务器的帖子时,它仍显示为&123.
希望这个问题不太具体,所以......
我的问题是,我什么时候才能真正关注我如何处理易受攻击的变量,什么时候不能.例如,使用像......这样的东西显然是不安全的.
echo $_POST['username']; // insecure !!!
Run Code Online (Sandbox Code Playgroud)
在你的模板中.据说$ _GET和$ _SERVER变量也很脆弱.因此,在"使用"它们之前,我必须对它们进行消毒.但在这种情况下,"使用"意味着什么.不安全的是例如输出它们,例如echo,将它们未经过滤地写入DB或将它们放入任何其他开放的上下文中.另一方面,将它们与其他变量进行比较,例如...
if ($_SESSION['username'] === $_POST['username']) {};
Run Code Online (Sandbox Code Playgroud)
或者将它们嵌入到像......这样的变量中
$file = 'http://www.example.com/users/' . $_POST['username']; // insecure !!! see Tom's answer
Run Code Online (Sandbox Code Playgroud)
然后检查......
if (file_exists($file)) {};
Run Code Online (Sandbox Code Playgroud)
......换句话说,将它们保存在某种封闭的环境中是安全的,不是吗?(在我看来,$ file-example可以被认为是安全方面的边界,但是就这样使用了,我认为没关系?).也许有人也知道开放和封闭的上下文之间的区别不那么明确(我希望它们在我的例子中)以引起人们的注意.
谢谢
xss ×10
php ×5
security ×5
javascript ×2
codeigniter ×1
cookies ×1
ember.js ×1
escaping ×1
input ×1
json ×1
mysql ×1
owasp ×1
user-input ×1
validation ×1
variables ×1