Dee*_*lue 6 html javascript php xss jquery
我担心与我的网站的javascript文件有关的事情,我不确定这是否可行.
当有人访问网站时,将下载Js文件,如果有人编辑了下载的js脚本并插入了他自己的代码,然后刷新了网站.在新刷新中,网站将读取已编辑的Js文件并运行恶意代码.恶意代码可能用于以正常方式在服务器上运行某些代码.
例:
用户只能在其页面中发布文章:
HTML
文章表单仅在用户页面中显示.
<?php
if( $user->id == $page->userID )
{
?>
<form>
<h1>Add new article:</h1><br />
<textarea name="articleText" cols="65" rows="3"></textarea>
<input class="SubmitArticle" id="<?php echo $userPage->id; ?>" name="SubmitArticle" type="button" value="Submit article" />
</form>
<?php
}
?>
Run Code Online (Sandbox Code Playgroud)
使用Javascript
$(".SubmitArticle").click( function(e){
var targetPage = $(this).attr('id');
var thisForm = $(this).parent();
var postData = thisForm.serialize() + "&targetPage=" + targetPage;
$.post(document.location, postData, function(data) {
$('#mainDiv').html(data);
});
});
Run Code Online (Sandbox Code Playgroud)
PHP
if( isset($_POST["SubmitArticle"]) )
{
$pageID = $_POST["targetPage"];
$text = $_POST["articleText"];
PublishArticle( $pageID , $text );
}
Run Code Online (Sandbox Code Playgroud)
恶意代码:
代码插入JS文件以在其他用户页面上写文章(这是不允许的),攻击者使用视图页面源从html元素读取页面ID(比如说page_id = 12):
postData = "SubmitArticle=1&targetPage=12&articleText='Muwhahahah'";
$.post(document.location, postData, function(data) {
});
Run Code Online (Sandbox Code Playgroud)
如果可能的话,解决方案是什么?
我认为您对网络服务器的工作原理存在一些误解。
从客户端的角度来看,服务器发送到客户端的所有内容都是只读的。
假设您从互联网上下载了一个 zip 文件。然后您修改并保存它。保存过程将发生在您的硬盘上,而不是服务器上。当您编辑本地文件(在您的示例中为 javascript 文件)时,它不会在服务器上编辑,只会在本地 PC 上编辑。
因此,您可以按照自己的意愿自由地执行/编辑本地文件。除非您以某种方式将其上传到服务器(例如 FTP),否则它只会位于您的本地 PC 上。
考虑到这一点,您应该始终在服务器端验证数据,因为熟练的用户可以编辑您的 JavaScript 以删除数据验证并将其发送到服务器。
小智 4
你的担心是对的,不要相信客户。曾经。
在您的示例中,您应该在发布文章之前验证用户,例如:
if( isset($_POST["SubmitArticle"]) ){
$pageID = $_POST["targetPage"];
$text = $_POST["articleText"];
if( $user->id == $page->userID ){
PublishArticle( $pageID , $text );
}
}
Run Code Online (Sandbox Code Playgroud)
不要停在那里
此外,您不应相信客户端会向您发送有效的文章文本和页面 ID。它可能是 SQL 注入、恶意 JavaScript、分页 html 等。您还需要清理您的输入。
| 归档时间: |
|
| 查看次数: |
2243 次 |
| 最近记录: |