2013-01-06 43 views
0

对数据库(MySQL)输出使用htmlspeciachars,还有什么要考虑防止XSS?对数据库(MySQL)输出使用htmlspeciachars,还有什么要考虑防止XSS?

它是正确的,fethcing从数据库中的数据时使用的输出用htmlspecialchars(在这种情况下,MySQL的),你会防止XSS?在这种情况下,HTML将显示在HTML文档中?还有什么你应该考虑的吗?我的意思是在哪些其他情况下你可能容易受到XSS的攻击?

可以说我有在那里我已经创建了一个登录系统一个网站,为用户发布新帖,在这里,用户可以删除这些新闻后,但JavaScript函数这里有alertbox使用()来使确保用户确实要删除这条消息,如果是新闻ID被链接通过URL传递这样的:

echo '<a class="btn-small btn-danger" onclick="deleteNews('. htmlspecialchars($newsidfk) .')" ">Delete news</a>'; 

JavaScript函数:

//alert deleteNews 
function deleteNews($newsidfk) 
{ 
var ans = window.confirm(Are you sure you want to delete this news post?'); 
     if (ans == true) 
     { 
      window.location.href="delete.php?news_id_fk="+$newsidfk; 
     } 
} 

有什么别的东西,我应该考虑防止XSS,还是不能在这里完成XSS?比方说,我有一个字符串istead一个数字,我应该做一些JavaScript编码,也许encodeURI()函数?

使用htmlspecialchars阻止例如script-tags,link-tags和img-tags运行是否正确?这就是XSS如何工作的原因,因为那么有人可以窃取用户的私人信息?

我已经了解到,在显示来自数据库的输出时,您应该始终进行清理,但是如何将输入存储到数据库中呢?您是否应该对此进行消毒,还是仅仅使用PDO准备好的陈述或其他方法以及如何操作?

我读过有关HTML表单消毒这篇文章维基: http://en.wikipedia.org/wiki/HTML_sanitization

回答

1

始终输出的JavaScript文字的JSON。

<a class="btn-small btn-danger" onclick="deleteNews(<?php echo htmlspecialchars(json_encode($newsidfk)); ?>)" ">Delete news</a> 

<script> 
var data = <?php echo json_encode($data); ?> 
</script> 
+0

好了,从来没有听说过这个json_encode的,应包括这样的图书馆吗? – user1938304

+0

我应该只在使用字符串时才这么做吗?我的意思是如果它只是一个数字,我不需要这样做? – user1938304

+0

不,但是您的PHP应该使用[JSON](http://php.net/manual/en/book.json.php)支持来构建。 –

1

它是正确的,fethcing从数据库中的数据时使用的输出用htmlspecialchars(在这种情况下,MySQL的),你会防止XSS?在这种情况下,HTML将显示在HTML文档中?还有什么你应该考虑的吗?我的意思是在哪些其他情况下你可能容易受到XSS的攻击?

是的,这是排序是正确的。有时被忽视的整个故事的一部分是字符编码。虽然默认情况下这种方式运行得很好,但它可以是是因为如果您没有检查您对通过htmlspecialchars输入的数据所使用的编码是否也向函数本身发出了信号,则会出现问题。

E.g.如果你使用PHP 5.3,和你有UTF-8编码字符串在数据库和您查询它们的方式和你使用UTF-8在HTML中,那么你也应该告诉htmlspecialchars

$flags = ENT_COMPAT | ENT_HTML401; 
$encoding = 'UTF-8' 

htmlspecialchars($string, $flags, $encoding); 

尽管如果你“再使用PHP 5.4,UTF-8是默认编码,你并不需要为它提供那么:

htmlspecialchars($string);