随着互联网的发展,越来越多的人选择使用网络进行交流、学习以及购物等活动。在这个过程中,个人信息也难免需要上传并存储在 服务器 上。其中,个人头像作为一个重要的信息元素,既能够增强用户的辨识度,又能够体现用户的个性和品味。然而,由于个人头像涉及到用户隐私和安全,因此上传和存储时需要考虑到相关的安全性问题。本文将详细介绍如何使用SSH安全上传个人头像并存储于数据库中。
一、SSH安全上传
SSH,即Secure Shell,是一种网络协议,能够实现安全远程登陆、远程命令执行以及安全传输文件等功能。相比于传统的FTP等协议,SSH使用的是加密传输,可以有效防止文件传输过程中的数据被非法获取的风险。因此,SSH上传是一种相对比较安全的上传方式,可以保证传输的数据内容不被窃取或篡改。
SSH上传的具体操作步骤如下:
1. 打开终端,输入ssh[emailprotected]命令,连接到服务器;
2. 输入密码或者私钥认证成功后,进入到服务器的目录;
3. 输入scp localfile[emailprotected]:/remote/directory/remote_file 将本地文件上传到服务器的目标路径中,其中localfile为本地文件的路径,/remote/directory/remote_file为服务器上的目标路径;
4. 回车,等待上传完成即可。
二、存储于数据库中
将用户头像存储于数据库中,相比于存储于文件系统中,具有更好的可控性和安全性。在数据库中,可以通过权限管理、备份还原等措施保证用户数据的安全性。同时,通过数据库存储,可以实现头像的实时更新和动态呈现,能够更好地满足用户需求。
具体的操作步骤如下:
1. 创建数据库表格,定义存储头像的字段类型;
2. 编写脚本,将上传的头像文件移动到指定目录并存储下载地址;
3. 执行数据库插入操作,将头像的下载地址信息存储到数据库中。
对于头像的读取操作,在网站页面中利用数据库的信息,动态获取头像下载地址进行访问和显示,即可实现头像的展示和实时更新。
三、安全性问题
在SSH上传和数据库存储的过程中,需要注意以下安全性问题:
1. 密码安全:在SSH上传过程中,使用的是用户名和密码进行认证,因此需要注意密码泄露的问题。安全的密码应该是强度较高、复杂度较大且不易被猜测或者暴力破解的,同时需要定期更换。
2. 权限越界:在上传过程中,需要注意目标路径是否符合权限规定,避免越权访问或者文件被破坏的风险。
3. 注入攻击:在数据库存储过程中,需要注意SQL注入等攻击,确保用户输入的信息符合规范。同时,应该尽可能对数据库中的内容进行加密和压缩,提高数据存储的安全性。
四、
本文详细介绍了如何使用SSH上传个人头像并存储于数据库中。通过SSH上传方式可以保证数据传输的安全性,而通过数据库存储的方式可以保证数据的完整性和安全性。在整个上传和存储的过程中,我们需要注意相关的安全性问题,避免隐私泄露和数据丢失等风险。
相关问题拓展阅读:
ssh 多文件上传,怎么实现
多附件struts 1.x,以下代码由agatezone提供。
1.Jsp要用javascript
2.form必须enctype=”multipart/form-data”
3.action要用form.getMultipartRequestHandler()获取文件并存储
struts2 更简单,google之。肢宽
struts1.x upload example
function addFileField() {
input_filesCount = document.getElementById(“filesCount”历顷亮);
input_filesCount.setAttribute(“value”, parseInt(input_filesCount.getAttribute(“value”)) + 1)
div_files = document.getElementById(“files”);
br = document.createElement(“br”);
file = document.createElement(“input”);
text = document.createTextNode(“File ” + input_filesCount.getAttribute(“value”) + ” : “);
file.setAttribute(“type”, “file”);
file.setAttribute(“name”, “file” + input_filesCount.getAttribute(“value”));
div_files.appendChild(text);
div_files.appendChild(file);
div_files.appendChild(br);

package cn.agatezone.example.struts1x.upload;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Hashtable;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
public class UploadAction extends Action {
@SuppressWarnings(“unchecked”)
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
String dirPath = getServlet().getServletContext().getRealPath(“/”) + “upload”;
Hashtable fileh = form.getMultipartRequestHandler().getFileElements();
for (Enumeration e = fileh.keys(); e.hasMoreElements();) {
String key = (String) e.nextElement();
FormFile formfile = (FormFile) fileh.get(key);
String filename = formfile.getFileName().trim(); // 文件名
* @注意!!!
* 这里我没有处理中文,但是如果想要中文无问题,
* 可以设置tomcat的server.xml中的URIEncoding=”UTF-8″
* 但是,要是不设置的话可以自己用代码解决问题!
* 为了简单明了,本例只作为struts1.x上传部分展示。
if (!””.equals(filename)) {
// 不同的浏览器传上的文件名可能有区别,有的是全路径的
// 在这里保存文件
InputStream ins = formfile.getInputStream();
OutputStream os = new FileOutputStream(dirPath + File.separatorChar + filename);
int bytesRead = 0;
byte buffer = new byte;
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
os.close();
ins.close();
} catch (Exception ex) {
System.out.println(“出错了!\n” + ex);
return mapping.findForward(“success”);
锐志陈鹏 专注Java/.Net培训
锐志技术社区:
JAVA上传的时候,不同的用户,怎么知道是谁上传的文件?
不同的用户肯定有标识,比如用户ID,
在用户表中加一个字段或者其他方式关联,通过用户ID能够找到头像的路径或者能够找到头像路径的字段
如果是把头像当成大字段存到数据库里面的话,那就是用户ID和头像关联
例如表:
userId(用户ID)。。。。。头像ID
zhangsan touxiang001
通过这种方式做关联
asp.net中如何实现头像上传
用file文件框就行,然后在提交后获取文件的对象,具体如老掘陪下:
string sfileGUID = “”;
string savedir = “”;
HttpPostedFile httpfile = Request.Files;
if (httpfile != null)
if(int.Parse(updateid)==0||int.Parse(deleteid)==0)
if (httpfile.ContentLength > 4028 * 1024)
sfileguid = Guid.NewGuid().ToString();
int iLastIndex = httpfile.FileName.LastIndexOf(“.”);
string sex = “”;
if (iLastIndex >= 0)
sex = httpfile.FileName.Substring(iLastIndex);
sfileguid += sex;
>香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
如何配置ssh免密码登录
1. 基本用法1.1 基本说明ssh key是一对密钥文件,一个public key文件是要给放到多端让其加到信任列表的,一个private key是留存本地,在鉴权的时候才需要。 下面的详细说明来自 SSH 安全性和配置入门:为了帮助验证身份,SSH 有一个密钥管理功能和相关的代理。 当配置为公钥身份验证时,您的密钥证明您在远程 SSH 主机上的身份。 一个基于 SSH 的身份包括两个部分:一个公钥和一个私钥。 私有 SSH 密钥是用于出站 SSH 连接的用户身份,且应当保密。 当用户发起一个 SSH 或 SCP 会话到远程主机或服务器时,他或她被认为是 SSH 客户端。 通过一个数学算法,一个私钥如同您的电子身份证;公钥如同您向其出示身份证的锁或门机制。 您的私钥说,“这真的是 Fred Smythe”;公钥说,“是的,您确实是真正的 Fred Smythe;您已通过身份验证:请进入。 ”您的公钥代表您允许通过您的大门或锁进入的人。 公钥需要保密;它们不能用于泄漏一个系统或对系统进行未经授权的访问。 在一个 Linux 或 UNIX 系统上,这些私有和公共密钥对存储在 ASCII 文本系统中;在 Windows 系统上,一些程序将密钥对存储为文本文件,一些存储在 Windows 注册表中。 1.2 生成密钥对 [ ~]$ /usr/bin/ssh-keygen -t dsaGenerating public/private dsa key file in which to save the key (/home/fsmythe//id_dsa):Enter passphrase (empty for no passphrase): ******(Enter mypassword)Enter same passphrase again: ****** (Enter mypassword)Your identification has been saved in /home/fsmythe//id_ public key has been saved in /home/fsmythe//id_ key fingerprint is:33:af:35:cd:58:9c:11:91:0f:4a:0c:3a:d8:1f:0e:e6 [ ~]$密钥有多种类型(DSA, RSA, ECDSA, ED等),上面用的是DSA,不指定类型时ssh-keygen默认类型是RSA.我们可以生成多个密钥,每个保存在不同的文件中.本例中生成的密钥保存在 /home/fsmythe//id_dsa 和 /home/fsmythe//id_中(前者是私钥,后者是公钥)Passphrase也是一种密码,是在程序读取你的私钥文件时要用到的(即你的私钥文件被加密保存了).如果你想完全自动登录对端(不想交互式输入任何东西)那么这里可以不输入passphrase(直接回车),不过从安全性上面来说并不是太好(更好的办法是采用 ssh-agent 来加载你的密钥(加载时输入passphrase),然后在后面使用过程中就是 ssh-agent 与对端交互,不再需要输入passphrase了)1.3 配置自动登录要用这个ssh key自动登录另一个机器的话,需要在本机执行这个: ssh-copy-id -i ~//id_rsa_ johndoe@210.32.142.88(当然,这一次还是要输入密码的.如果你生成密钥时输入了passphrase的话,这里还得输入passphrase)这样下次就可以直接用 ssh johndoe@210.32.142.88 来直接登录对端机器了.当然 scp johndoe@210.32.142.88:/home/johndoe/ .也不会再询问你密码,rsync -av johndoe@210.32.142.88:/h[[ome/johndoe/Downloads]] . 也不会.1.4 参考文档:如何在 CentOS / RHEL 上设置 SSH 免密码登录 (其实内容并不只是适用于 RHEL/CentOS,甚至连 RHEL/CentOS 上典型的selinux的问题(见本文后面的补充说明)都没有提到)SSH 安全性和配置入门: ( 跟我们这里相关的是中间"SSH 的私钥和公钥对" 和 "配置公私 SSH 密钥对的步骤"这两节 )2. 各种细节问题2.1 目录权限问题导致ssh key不被接受如果你自动登录不成功,在屏幕上见到如下字样:$ ssh admin@210.32.142.88@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: UNPROTECTED PRIVATE KEY FILE!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Permissions 0755 for /home/johndoe//id_rsa are too is required that your private key files are NOT accessible by private key will be permissions: ignore key: /home/johndoe//id_rsaadmin@210.32.142.88s password:这里的文字已经把原因说得比较清楚了,是 /home/johndoe//id_rsa 的权限设置得太宽泛,ssh认为密钥文件可以被其它人读取/拷贝,所以拒绝使用它.解决办法是去除其它人的读写权限(chmod go-rw ~//id_rsa )--当然,前提是你确认这个文件没有被被人盗用(或者你不在乎这个).2.2 RHEL/CentOS的selinux干扰导致登录不成功对RHEL6服务器配置ssh key自动登录死活不成功,ubuntu就一点问题没有,结果是SELinux在搞鬼,在你排除了其它明显的原因后可以试试这一句(在对端上(即RHEL/CentOS上)执行): restorecon -Rv /home/myname/ 参考: Cant get SSH public key authentication to work - Server Fault2.3 没有ssh-copy-id时如何手工设置也许你会好奇 ssh-copy-id 到底干了什么,或者你的系统上没有这个工具(后面我们将putty key加到openssl信任列表时就会需要了解这个).其实挺简单,它只是将你的public key 加了对端的 ~//authorized_keys 这个文件中(每条密钥一行).不过这里也有一个细节: 对端的 ~/ 目录和 ~//authorized_keys 文件均不能是其它人可以写入的(即为了防止其它人写这个文件来达到登录当前帐号).所以 ssh-copy-id 的比较完整的手工设置方法是:$ ssh umask 077; mkdir $ cat $HOME//id_ | ssh cat >> /authorized_keys参考: Install / Append SSH Key In A Remote Linux / UNIX Servers Authorized_keys2.4 多个服务器需要用不同的ssh key登录前面说过,我们可以生成多个密钥,每个保存在不同的文件中.ssh-keygen 会询问你保存的位置,你也可以对密钥文件改名(只要两个文件的基本名一致即可).登录某个服务器时如何指定具体的密钥呢? ssh -i ~//id_rsa_inneradmin@210.32.151.66scp -i [[~//id_rsa_inner]]admin@210.32.151.66:/home/admin/ -copy-i -i [[~//id_rsa_inner]] admin@210.32.151.66如果你觉得这样比较繁琐,或者像rsync这样的工具并没有提供类似 -i 选项让你指定密钥文件,那么可以配置 ~//config 文件来解决Host 210.32.151.66 IdentityFile ~//id_rsa_inner UserName adminHost bbs1HostName210.32.142.88IdentityFile ~//id_rsa_bbsHost 10.93.*IdentityFile ~//id_rsa_group这种情况下,登录不同的地址就会自动采用不同的密钥了.
织梦错误解决:把数据保存到数据库主表 `#@__archives` 时出错
解决方法:1.下载DedeCmsV5.3GBK-5.6GBK的升级包解压并在uploads文件夹里找到,复制此文件3.将该文件拷贝到DEDE根目录4.运行localhost/-解决!
Delphi7.0怎么将个人照片保存进SQL数据库中??
delphi图片写入SQL数据库 procedure 1Click(Sender: TObject); // 插入图片过程 varStream:TMemoryStream; begintryStream := ; // 创建内存流(Stream); // 将图片保存到内存流中;;(Insert into tbltemp (Image) values (:photo)); // 进行插入操作(photo)(Stream,ftBlob); // 读取保存的内存图;; // 释放内存流end; end; procedure 2Click(Sender: TObject); //读取图片过程 varStream:TMemoryStream;Jpg:TjpegImage; ;:=SELECT * FROM tbltemp; // 查询图片;if not (Image) thenbeginStream:= ;Jpg:= ;TBlobField((Image))(Stream); // 显示的转换为BlobField并保存到内存流 :=0;(Stream); // 加载图片(Jpg); :=nil;end; end;
发表评论