Questions tagged «security»

有关密码和IT安全的问题。这可以是计算机,网络或数据库的安全性。

7
私有的,不可猜测的URL是否等于基于密码的身份验证?
我想在网络上公开资源。我想保护此资源:确保只有某些个人可以访问它。 我可以设置某种基于密码的身份验证。例如,我只能允许在提供文件之前通过Web服务器访问资源,该Web服务器检查传入的请求以获取正确的凭据(可能针对用户的某些后备数据库)。 或者,我可以只使用私有URL。就是说,我可以简单地将资源托管在一些无法猜到的路径上,例如https://example.com/23idcojj20ijf...,它将访问权限限制为知道确切字符串的用户。 从想访问此资源的邪恶者的角度来看,这些方法是否等效?如果没有,是什么使它们与众不同?就可维护性而言,在实施一种或另一种方法之前,我应该意识到这两种方法的优缺点吗?

7
您被雇用为一个安全性高的网站修复一个小错误。查看代码,其中充满了安全漏洞。你是做什么?[关闭]
我被某人雇用在网站上做一些小工作。这是一家大型公司的网站。它包含非常敏感的数据,因此安全性非常重要。在分析代码后,我注意到它存在安全漏洞-读取大量PHP文件,将用户获取/发布输入直接扔到mysql请求和系统命令中。 问题是,为他创建站点的人是一位程序员,有家人和孩子依靠这项工作。我不能只说:“您的站点是一个脚本儿童游乐园。让我为您重做一次,一切都会好起来的。” 在这个情况下,你会怎么做? 更新: 我在这里遵循了一些好的建议,并礼貌地向开发人员报告说,我在网站上发现了一些可能的安全漏洞。我指出了这一点,并说那里的SQL注入攻击可能存在一个漏洞,并询问他是否知道。他回答:“当然,但是我认为,要利用它,攻击者应该掌握有关数据库结构的信息;我必须更好地理解”。 更新2: 我说并非总是如此,建议他遵循此Stack Overflow问题链接以正确处理它:如何防止PHP中的SQL注入?他说他会研究的,并感谢我以前告诉过他。我想我的工作已经完成,谢谢大家。

3
REST API安全性存储令牌vs JWT vs OAuth
我仍在尝试寻找最佳的安全解决方案来保护REST API,因为移动应用程序和API的数量每天都在增加。 我尝试了不同的身份验证方式,但是仍然存在一些误解,因此我需要经验丰富的人的建议。 让我说说,我如何理解所有这些东西。如果我理解不正确,请告诉我。 就REST API和WEB而言,它都是无状态的,我们需要在每个请求中发送一些auth数据(cookie,令牌...)。我知道三种用于验证用户身份的广泛使用的机制 使用HTTPS的令牌。我已经使用这种方法很多次,对于HTTPS来说已经足够了。如果用户提供正确的密码和登录名,他将收到令牌作为响应,并将其用于其他请求。令牌由服务器生成并存储,例如存储在单独的表中或存储用户信息的表中。因此,对于每个请求服务器,检查用户是否具有令牌,并且该令牌与数据库中的令牌相同。一切都非常简单。 JWT令牌。该令牌是自描述的,它包含有关令牌本身的所有必要信息,用户无法更改(例如到期日期)或任何其他声明,因为该令牌是由服务器使用secret关键字生成(签名)的。这也很清楚。但是对我个人来说,一个大问题是如何使令牌无效。 OAuth2。我不明白为什么直接在服务器和客户端之间建立通信时应使用这种方法。据我了解,OAuth服务器用于发布具有受限范围的令牌,以允许其他应用程序访问用户信息而无需存储密码和登录名。对于社交网络而言,这是一个很好的解决方案,当用户想要在某个页面上进行注册时,服务器可以请求权限以获取用户信息(例如,从Twitter或Facebook获取信息),并使用用户数据等填充注册字段。 考虑将移动客户端用于在线商店。 第一个问题,我应该比第一类令牌更喜欢JWT吗?就我需要在移动客户端上登录/注销用户而言,我需要将令牌存储在某个地方,或者在JWT的情况下,令牌应该在注销时失效。使用不同的方法来使令牌无效,其中之一是创建无效的令牌列表(黑名单)。嗯 表/文件的大小比令牌存储在表中并与用户相关联并且在注销时被删除时要大得多。 那么,JWT令牌的好处是什么? 关于OAuth的第二个问题,如果与服务器直接通信,应该使用它吗?客户端和服务器之间仅发出令牌的另一层的目的是什么,但是通信将不是与oauth服务器,而是与主服务器。据我了解,OAuth服务器仅负责授予第三方应用访问用户私人信息的权限(令牌)。但是我的移动客户端应用程序不是第三方。
104 security  rest  api  oauth  https 

8
如何仅为受信任的移动应用程序维护REST API
如何确保我的REST API仅响应受信任客户端(对于我自己的移动应用程序)生成的请求?我想防止来自其他来源的不必要的请求。我不希望用户填写序列号或其他任何东西,它应该在安装后在后台进行,并且不需要任何用户交互。 据我所知,HTTPS仅用于验证与之通信的服务器的身份。我当然要使用HTTPS加密数据。 有没有办法做到这一点? 更新: 用户可以执行只读操作,这些操作不需要用户登录,但可以执行写操作,这些操作也需要用户登录(通过访问令牌进行身份验证)。在这两种情况下,我都希望API响应仅来自受信任的移动应用程序的请求。 该API也将用于通过移动应用程序注册新帐户。 更新2:似乎有多个答案,但是老实说,我不知道将哪个标记为答案。有人说可以做到,有人说不能做到。
96 security  rest  mobile 

7
机器人如何击败验证码?
我有一个网站电子邮件表格。我使用自定义的验证码来防止机器人发送垃圾邮件。尽管如此,我仍然收到垃圾邮件。 为什么?机器人如何击败验证码?他们是使用某种高级OCR还是只是从存储位置获取解决方案? 我该如何预防?我应该改用另一种验证码吗? 我确信电子邮件来自表单,因为它是从提供表单消息的我的电子邮件发送者发送的。字母样式也相同。作为记录,我使用的是PHP + MySQL,但我没有在寻找解决此问题的方法。我对一般情况下机器人如何击败这些技术感兴趣。我只是以这种情况为例,所以您可以更好地理解我的要求。
84 security  captcha 

17
如何保护软件免遭盗版?
为什么今天看起来很容易盗版? 似乎有点难以相信,随着我们的所有技术进步以及在工程上花费了数十亿美元用于开发最令人难以置信的令人兴奋的软件,我们除“序列号/激活密钥”外,没有其他方法可以防止盗版。 ”。我敢肯定,创建Windows 7或Office甚至是Snow Leopard花费了大量资金,甚至数十亿美元,但我可以在不到20分钟的时间内免费获得它。所有Adobe产品都一样,这可能是最简单的。 可以存在一种防呆和防黑客的方法来保护您的软件免遭盗版吗?如果不现实,理论上可能吗?还是不管这些公司采用什么机制部署,黑客都能找到解决方法吗?
76 security 

15
有什么理由不直接从客户端Javascript转到数据库吗?
可能重复: 编写Web“服务器少”应用程序 因此,假设我要构建一个Stack Exchange克隆,然后决定使用CouchDB之类的东西作为我的后端存储。如果我使用它们的内置身份验证和数据库级别授权,是否有任何理由不允许客户端Javascript直接写入可公开使用的CouchDB服务器?因为这基本上是一个CRUD应用程序,并且业务逻辑由“只有作者才能编辑他们的帖子”组成,所以我认为在客户端内容和数据库之间没有一层的必要性很高。我只是在CouchDB端使用验证,以确保没有人放入垃圾数据,并确保正确设置权限,以便用户只能读取自己的_user数据。渲染将通过类似于AngularJS的客户端完成。从本质上讲,您可能只拥有一个CouchDB服务器和一堆“静态”页面,因此一切顺利。您不需要任何类型的服务器端处理,而只需要一些可以处理HTML页面的内容即可。 向世界开放我的数据库似乎是错误的,但是在这种情况下,只要正确设置权限,我就无法想到为什么。这违背了我作为Web开发人员的本能,但我想不出一个很好的理由。那么,为什么这是个坏主意呢? 编辑:看起来这里有一个类似的讨论:编写Web“服务器少”应用程序 编辑:到目前为止,很棒的讨论,我感谢大家的反馈!我觉得我应该添加一些通用假设,而不是专门调用CouchDB和AngularJS。因此,我们假设: 数据库可以直接从其隐藏存储对用户进行身份验证 所有数据库通信都将通过SSL进行 数据验证可以(但不应这样做)由数据库处理 除了管理员功能外,我们关心的唯一授权是仅允许某人编辑自己的帖子 每个人都可以读取所有数据(除了可能包含密码哈希的用户记录之外),我们非常满意 管理功能将受到数据库授权的限制 没有人可以将自己添加为管理员角色 数据库相对容易扩展 真正的商业逻辑几乎没有,甚至没有。这是一个基本的CRUD应用

14
为什么SQL注入预防机制会演变为使用参数化查询的方向?
在我看来,可以通过以下方式防止SQL注入攻击: 仔细筛选,过滤和编码输入(在插入SQL之前) 使用准备好的语句 /参数化查询 我想每个都有优点和缺点,但是为什么#2脱颖而出,或多或少地被认为是防止注入攻击的实际方法?是更安全,更不容易出错,还是还有其他因素? 据我了解,如果正确使用#1并注意所有警告,它可能与#2一样有效。 消毒,过滤和编码 在清除,过滤和编码的含义上,我感到有些困惑。我要说的是,出于我的目的,以上所有选项都可以考虑作为选项1。在这种情况下,我了解到清理和过滤有可能修改或丢弃输入数据,而编码可以按原样保留数据,但可以对其进行编码适当避免注射攻击。我认为转义数据可以视为对数据进行编码的一种方式。 参数化查询与编码库 有一些答案,其中parameterized queries和的概念encoding libraries可以互换使用。如果我错了,请指正我,但我印象深刻的是它们是不同的。 我的理解是encoding libraries,无论多么出色,他们总是有潜力修改SQL“程序”,因为在发送给RDBMS之前,他们正在对SQL本身进行更改。 Parameterized queries 另一方面,将SQL程序发送到RDBMS,然后优化查询,定义查询执行计划,选择要使用的索引等,然后插入数据,作为RDBMS内部的最后一步本身。 编码库 data -> (encoding library) | v SQL -> (SQL + encoded data) -> RDBMS (execution plan defined) -> execute statement 参数化查询 data | v SQL -> RDBMS (query execution plan defined) -> …

9
为什么不公开主键
在我的教育中,我被告知将真实的主键(不仅是DB密钥,而且是所有主访问器)公开给用户,这是一个错误的想法。 我一直认为这是一个安全问题(因为攻击者可能会尝试读取自己的东西,而不是自己的东西)。 现在,我必须检查是否无论如何都允许用户访问,所以背后有其他原因吗? 另外,由于我的用户无论如何都必须访问数据,因此我需要在两者之间的某个外部世界拥有一个公共密钥。现在,公用密钥与主密钥存在相同的问题,不是吗? 人们一直要求有一个示例说明为什么仍然要这样做,所以这里是一个。请记住,这个问题不仅涉及原理本身,而且要在本示例中应用。明确欢迎解决其他情况的答案。 处理活动的应用程序(Web,移动设备)具有多个UI和至少一个用于系统间通信的自动API(例如,会计部门希望根据已完成的操作向客户收取多少费用)。该应用程序有多个客户,因此必须将其数据分开(从逻辑上讲,数据存储在同一数据库中)。无论如何,都会检查每个请求的有效性。 活动是非常精细的,因此它在某个容器对象中在一起,可以称之为“任务”。 三个用例: 用户A希望将用户B发送给某个任务,因此他向他发送了一个链接(HTTP)以在其中完成一些活动。 用户B必须走出建筑物,以便他在移动设备上打开任务。 会计部门希望向客户收取该任务的费用,但使用第三方会计系统,该系统通过引用REST-API的某些代码自动加载任务/活动 每个用例都要求(或变得更加容易)代理为任务和活动提供一些可寻址的标识符。

8
为什么在提交(并再次在服务器上再次对其进行哈希处理)之前,客户端中几乎没有网页会在客户端中对密码进行哈希处理,以“防止”密码重用?
Internet上有许多站点需要登录信息,并且防止密码重用的唯一方法是“保证”密码在服务器上被散列,但这并不总是正确的。 因此,我想知道,在将密码发送到服务器之前,在客户端计算机(使用Javascript)中创建一个哈希密码的网页有多困难?从理论上讲,这不会提供任何额外的安全性,但是在实践中,这可以用来防止不会在服务器中哈希密码的“恶意站点”。

7
堆栈跟踪是否应该出现在向用户显示的错误消息中?
我在工作场所有些争论,我试图弄清楚谁是正确的,以及正确的做法是什么。 上下文:我们的客户用于会计和其他ERP内容的Intranet Web应用程序。 我认为向用户显示的错误消息(当事情崩溃时)应该包括尽可能多的信息,包括堆栈跟踪。当然,它必须以友好的大写字母“ N发生错误,请向开发人员提交以下信息”开头。 我的理由是,崩溃的应用程序的屏幕快照通常将是唯一容易获得的信息源。当然,您可以尝试与客户的系统管理员联系,尝试解释您的日志文件在何处,等等,但这可能会很缓慢且令人痛苦(与客户代表进行交流的大部分时间是这样)。 另外,拥有即时和完整的信息在开发中非常有用,在开发中,您不必遍历日志文件即可查找每个异常所需的内容。(但这可以通过配置开关解决。) 不幸的是,已经进行了某种形式的“安全审核”(不知道他们是如何在没有来源的情况下执行此操作的……但是无论如何),并且他们抱怨完整的异常消息将其视为安全威胁。当然,客户(至少是我所知道的)已经从表面上看待了这一点,现在要求清除消息。 我看不到潜在的攻击者如何使用堆栈跟踪来找出他以前无法理解的任何东西。是否有任何例子,有记录的证明有人这样做吗?我认为我们应该与这个愚蠢的想法作斗争,但也许我是这里的傻瓜,所以... 谁是对的?

2
基于角色与权限的访问控制
我试图了解访问控制(授权)时角色和权限之间的固有权衡。 让我们从一个给定的开始:在我们的系统中,“ 权限”将是一个细粒度的访问单位(“ 编辑资源X ”,“ 访问仪表板页面 ”,等等)。一个角色将是1 +权限的集合。一个用户可以具有1个以上的角色。所有这些关系(用户,角色,权限)都存储在数据库中,可以随时根据需要进行更改。 我的担忧: (1)检查用于访问控制的角色有何“坏处”?通过检查权限可获得什么好处?换句话说,以下这两个摘要有什么区别: if(SecurityUtils.hasRole(user)) { // Grant them access to a feature } // vs. if(SecurityUtils.hasPermission(user)) { // Grant them access to a feature } 和: (2)在这种情况下,角色甚至可以提供什么有用的价值?我们不能直接为用户分配1+权限吗?角色提供什么抽象的具体价值(有人可以提供具体示例)吗?

13
编译一个随机陌生人的源代码有多安全?[关闭]
假设我正在审查求职者发送的证明其技能的代码。显然,我不想运行它们发送的可执行文件。不太清楚,我宁愿不运行其代码的编译结果(例如,Java允许在注释中隐藏可运行的代码)。 编译他们的代码呢?我需要编译器警告,但是如果它们的代码包含一些巧妙的字符序列,这些序列会利用我的编译器并且我的编译器危害了我的机器,该怎么办? 当我用Google搜索“编译器漏洞”时,得到的所有信息都与编译器优化和代码发布有关,以及所发出的代码是否与原始源代码一样安全。 编译器是否通常经过验证,以确保它们在编译一些巧妙的代码时不会危害用户计算机?从陌生人那里编译一段代码有多安全?

9
寻找有意义的,有力的理由支持开发机器上的防病毒软件[关闭]
当形成意见,这是一个很好的做法,遵循的学术传统-觉得很难,因为你可以对你持有的意见,并设法找到反驳。 但是,无论我多么努力,我都无法在开发机器上找到支持防病毒(及相关安全措施)的合理论据。 针对开发中的防病毒(AV)的争论很多: 在AV开启的情况下,进行1分钟构建需要花费10倍的时间并不少见 在一次会议演讲中,IntelliJ开发人员声称当他们的IDE缓慢时,AV软件是第一大嫌疑人。 开启AV时,解压缩速度约为100 kb / s AV导致Cygwin完全无法使用(vim需要1分钟才能打开一个简单的文件) AV阻止我从同事的电子邮件中下载有用的文件(JAR,DLL) 我不能使用多台计算机进行开发,因为AV /安全措施阻止我解除端口阻塞 AV会破坏文件高周转率的程序(例如Maven或Ant)的性能 最后但并非最不重要的一点-AV实际上可以保护我免受什么侵害?我不知道我的AV程序曾经停止过任何安全线程。 如果原因是担心泄露NDA内容-如果我下定决心,任何AV都无法阻止我这样做。 如果原因是担心丢失源代码和/或文档-为此,可以使用分布式修订系统(我们的回购至少有20份副本,并且每天进行同步)。 如果担心害怕泄露客户数据的原因是,开发人员很少与真实的生产数据库建立联系,而是在玩具环境中玩耍。 即使有支持在开发计算机上使用AV的有意义的论点,当面对在偏执的受保护环境中运行虚拟机的能力时,它们也会瓦解。 由于我想对此问题保持开放态度,因此有人可以提出有意义的,有力的论据来支持开发人员使用防病毒软件吗?

10
是否有任何有效的理由禁止字符和限制密码的长度?
我遇到过很多站点,它们要么限制了允许输入密码的长度和/或不允许某些字符。这对我来说是一个限制,因为我想扩大和延长密码的搜索空间。这也给我一种令人不适的感觉,即它们可能不会散列。 是否有充分的理由设置长度上限或排除密码中的字符?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.