
Security News
Axios Supply Chain Attack Reaches OpenAI macOS Signing Pipeline, Forces Certificate Rotation
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.
Tetrapod.js λ λ³νλ λΉμμ΄ λ¨μ΄ ννλ€μ νμ νκ³ νμ§νκΈ° μν΄ κ°λ° λκ³ μλ λͺ¨λν νλ‘κ·Έλ¨μ λλ€. νκ΅μ΄μμ μ‘΄μ¬νλ λΉμμ΄ λ¨μ΄λ€μ μ°μ μ μΌλ‘ νμ§ λμμΌλ‘ μ νμ¬ κ°λ°λκ³ μμΌλ©°, ν₯ν λͺ¨λ μΈμ΄μμ λ³νλ λΉμμ΄ ννμ νμ§νλλ° μ¬μ©λ μ μμ΅λλ€.
νμ¬ μ΄κΈ° κ°λ° μ§ν μ€μ μλ νλ‘μ νΈμ λλ€.
λμ²΄λ‘ λΆμκΈ°κ° μ’μ§ μμΌλ©΄, μΈμ΄ λν κ·Έλ κ² λλ€. (When the general atmosphere is bad, language must suffer)
μΈν°λ· μμμ λ€μκ° λͺ¨μ¬μ λν μ€ λΆμκΈ°κ° λλΉ μ§κ±°λ μ¬ν λ΄ λΆμκΈ°κ° λμκ² λλ©΄, μ΄μλ°λΌ μ¬λλ€μ΄ μ¬μ©νλ μΈμ΄ λν 과격νκ² λκ±°λ λΉμμ΄λ μ μν λ¨μ΄λ₯Ό μμ΄ μ¬μ©νλ μ¬λλ€μ΄ λ±μ₯νκ² λ©λλ€. μ΄λ¬ν μν©μ κ·Όλ³Έμ μμΈμ μ¬νμ λ¬Έμ μΌ μλ, κ°μΈμ λ¬Έμ μΌ μλ μμ΅λλ€. μ΄λ¬ν ννμ λΉμ¬μμ κ°μ μ λ΄κ³ μμΌλ©° μ΄λ₯Ό λ³Έ μ¬λλ€ λν κ°μ μ΄ μνκ² λλ κ²½μ°κ° μκΉλλ€.
μκ°μ΄ μΈμ΄λ₯Ό μ€μΌμν¨λ€λ©΄, μΈμ΄ μμ μκ°μ μ€μΌμν¬ μ μλ€. (If thought corrupts language, language can also corrupt thought.)
μΈμ΄λ κ°μ μ μ€μ μ μλ λ§€κ°μ²΄λ‘μ¨, μ΄λ ν μΈμ΄μ ννμ λ³΄κ³ κΈ°λΆμ΄ λμκ² λ§λλ κ² λΏλ§ μλλΌ, μ΄λ ν κ°μ μ μ λ¬νκΈ° μν λͺ©μ λ§μ μν΄μ μ¬νμ μΌλ‘ κ°μΈ λλ μ§λ¨μ μν΄μ λͺ¨λκ° μ¬μ©νλ μΈμ΄κ° λ³νλ μ μμ΅λλ€. κ·Έλ κ² μΈμ΄μ λ΄κΈ°λ κ°μ μλ μ±μ μΈ κ°μ μ΄ λ΄κΈΈ μλ, νλ ₯μ μΈ κ°μ μ΄ λ΄κΈΈ μλ μμΌλ©° κ·Έ μ νμ λ§€μ° λ€μν©λλ€.
νκ΅μ΄λ μμκ³Ό λͺ¨μμ λͺ¨μμ μΈ μ μλ λͺ¨μμ°κΈ°κ° κ°λ₯ν μ μμ κΈ°μ‘΄ λ€λ₯Έ μΈμ΄κΆκ³Όλ λ€λ₯΄κ² μ΄λ ν λ¨μ΄κ° λ³νλμ΄ μκΈΈ μ μλ νμλ¨μ΄κ° μκΈ°κΈ° λ§€μ° μ¬μ°λ©° λ³νλ λ¨μ΄λ₯Ό κΈ°κ³μ μΌλ‘ νμ§νκΈ° λ§€μ° μ΄λ €μ΄ ꡬ쑰λ₯Ό κ°μΆκ³ μμ΅λλ€.
μμ μ΄ μ°λ μΈμ΄λ₯Ό κ°κ²°νκ² νλ€λ©΄, κ°μ₯ μ΄λ¦¬μμ ν΅μ€λ‘λΆν° μμ λ‘μμ§ μ μλ€. λΆνμν κ΄μ©μ΄λ₯Ό μΈ μ μμΌλ©°, μ΄λ¦¬μμ ννμ μ°λ©΄ κ·Έ μ΄λ¦¬μμμ΄ μ€μ€λ‘μκ²λ λΆλͺ ν λλ¬λ 보μ΄κ² λλ€. (If you simplify your English, you are freed from the worst follies of orthodoxy. You cannot speak any of the necessary dialects, and when you make a stupid remark its stupidity will be obvious, even to yourself.)
μ΄ νλ‘μ νΈμ λͺ©νλ μΈν°λ· μμμ λ²λνλ λΉμμ΄κ° 무λΆλ³νκ² νΌμ§λ κ²μ λ°©μ§ν μ μλ μ΄λ ν λ°©νμ μ κ°μ λͺ¨λμ κ°λ°νλ κ²μ λλ€. λ§μ κ³³μμ μ¬μ©λλ κ²μ λͺ©μ μΌλ‘ νκΈ°μ μ΄ νλ‘μ νΈ κ΅¬μ±μ Copyleft λ‘ κ΅¬μ±λλ©° μ 무μμ κ°λ¦¬μ§ μκ³ λ¬΄λ£λ‘ μμ λ‘μ΄ μ¬μ©μ΄ κ°λ₯νκ²λ λ°°ν¬λλ κ²μ λͺ©μ μΌλ‘ ν©λλ€.
MIT Licensed
κΈ°μ‘΄μ νν°λ§μ λ¬Έμ₯ λ¨μλ‘ λΉμμ΄ λ¬Έμκ° λ¬Έμμ΄ μμ μ‘΄μ¬νλμ§ λ§μ νμΈν©λλ€. κ°λ Ή λ°λ³΄ λΌλ λΉμμ΄λ₯Ό μ°¨λ¨νλ € ν λ μ΄μ©μκ° μλ
λ°λ³΄μΌ λΌλ λ©μΈμ§λ₯Ό μ
λ ₯νλ€λ©΄, λ°λ³΄λΌλ λ¬Έμ₯μ΄ μ‘΄μ¬νλ κ²½μ°μ κ°μ΄, λ³νλμ§ μμ μμ€μ΄ μ‘΄μ¬νλ λ©μμ§μ νν΄μλ§ νμ§κ° κ°λ₯ν©λλ€. κ·Έλ¬λ μλμ κ°μ λ³νμ λν΄μλ λμ²νμ§ λͺ»ν©λλ€.
μλ
λ°111보μΌ, μλ
λ°μμμ보μΌμλ
λΉ μλ½μ€μΌ!, μλ
ba보μΌ!κ°μΎνͺλλΆμ λ° μ’ μ
λ₯μ³! => μ λ° μ’ μ
μ³λ₯!λν λΉμμ΄λ₯Ό μΌλΆ ν¬ν¨νκ³ μμ§λ§ μ μμ μΌλ‘ μ°μΌ μ μλ λ¨μ΄λ€μ΄ μ‘΄μ¬νμ¬ μΌλΆ ννμ μ€νμ§ν νλ₯ μ λμ΄κΈ°λ ν©λλ€.
κ·Έ μ¬κ±΄μ μλ°μ μ Aμ¨μλ€. Tetrapod.js μ μ΄λ¬ν λΉμμ΄ νμ§ μκ³ λ¦¬μ¦μ νκ³λ₯Ό 극볡νκΈ°μν΄μ, μ μλ¨μ΄λ₯Ό λ¨Όμ μ°Ύμμ νμ§ λ²μμμ λ°°μ νλ€μ, λΉμμ΄ λ¨μ΄λ₯Ό ν κΈμ μ© μ‘΄μ¬μ¬λΆλ₯Ό νμ
ν©λλ€. λν νκ΅μ΄ μμ€μ μμ§νκ³ ν΄λΉ μμ€μ λ³νμ νμ μμ΄, μμ , μ΄μ 3λ¨κ³μ κ±Έμ³μ κ°λ₯ν λͺ¨λ λ³νκ°λ₯ν ννλ₯Ό νμ
ν©λλ€.
Tetrapod.js μμ μ¬μ©νλ λΉμμ΄ νμ§ μκ³ λ¦¬μ¦μ ꡬμ±μ λ€μκ³Ό κ°μ΅λλ€.
μλ°μ κ³Ό κ°μ λ¨μ΄μ μ€νμ§λ₯Ό λ§κΈ° μν΄μ μ¬μ μ λ¬Έμμ΄μμ μ°Ύμμ λΉμμ΄ νμ§μ νμ§λμμμ μ μΈμν¬ μ©λμ μ μλ¨μ΄ λͺ©λ‘μ ꡬμ±ν©λλ€.μμ΄, μμ , μ΄μ 3λ¨κ³μ κ±Έμ³μ κ° κΈμ μμλ€μ λ³νμ λͺ¨λ νμ
νμ¬μ λΉμμ΄ λ¨μ΄ λͺ©λ‘μ ꡬμ±ν©λλ€. ν΄λΉ λ΄μ©μ νλ¨μ Bias ꡬμ±λ μμ μμΈν μ€λͺ
ν©λλ€.Tetrapod.js μμ μ¬μ©νλ λΉμμ΄ νμ§ μκ³ λ¦¬μ¦μ μ§νκ³Όμ μ λ€μκ³Ό κ°μ΅λλ€.
γ±, γ
λ μμ±λ νκΈμ΄ μλλ©° μμ±λ νκΈμ μ λμ½λλ‘ κ°(0xAC00) ~ ν£(0xD7A3) μ¬μ΄μ κΈμλ₯Ό λ»ν©λλ€.) λν μμ±ν κΈμμ΄λλΌλ μμμ΄ γ
μΈκ²½μ°μλ λΉμμ΄ μμΈμ²λ¦¬λ₯Ό νμ§ μμ΅λλ€. μ: λ°μμλ³΄μ€ μ κ°μ΄ μ΄μ΄μ£Όλ μμ κ²½μ° λΉμμ΄ μ²λ¦¬κ° νμν©λλ€.let data = [[
"λ°",
"ba"
],[
"보",
"bo"
]]
let result = Bias.recursiveList(data)
let resultCheck = [
"λ°λ³΄",
"λ°bo",
"ba보",
"babo"
]
console.log(result == resultCheck)
// true
RecursiveList λ‘λ μμκ³Ό λͺ¨μμ λ³νκ³Όμ μ μΈλΆνν΄μ λͺ μνλλ° μ ν©ν ꡬ쑰λ₯Ό κ°μΆκ³ μμ΅λλ€. νμ§λ§ μμ λͺ¨μμ ν©μ±ν΄μ μμ±λ νκΈλ¬Έμλ‘ ν©μΉλ€λμ§, μμκ³Ό λͺ¨μμ μ¬νμ©ν μ μλ μ΄λ ν ꡬ쑰λ RecursiveComponent μμ λ€λ£Ήλλ€.
let data = [[
[[
'γ
',
'γ
'
],[
'γ
',
'γ
'
]],
"ba"
],[
"보",
"bo"
]]
let result = Bias.recursiveList(data)
let resultCheck = [
"γ
γ
보",
"γ
γ
보",
"γ
γ
보",
"γ
γ
보",
"γ
γ
bo",
"γ
γ
bo",
"γ
γ
bo",
"γ
γ
bo",
"ba보",
"babo"
]
console.log(result == resultCheck)
// true
RecursiveComponent λ RecursiveList μ μ¬μ¬μ©μ±μ λμ΄κ³ λ°°μ΄ μμμ μ¬μ©κ°λ₯ν λΆκ°μ μΈ ν¨μκ°λ μ μ 곡ν©λλ€.
RecursiveComponent λ λ³μμ μ½λκ° μ‘΄μ¬νλ©°, μμκ³Ό λͺ¨μ κ°μ΄ νκΈλ¬Έμμ μ΅μ λ¨μμΈ μμ΄ μ RecursiveList λ‘ ννν λ μ¬νμ©μ±μ λμ΄κΈ° μν΄μ λ³μλ₯Ό μ¬μ©νλ©°, ν΄λΉ μμ΄λ€λ‘ μ΄λ ν μ΅μ’
μ μΈ μμ μ ꡬμ±ν λ μ½λ λ₯Ό ꡬμ±ν©λλ€.
RecursiveComponent λ₯Ό ꡬμ±ν λ νκ΅μ΄μ κ²½μ° μμ΄, μμ , μ΄μ μ ννλ‘ κ΅¬μ±λ μ μμ§λ§, ν₯ν κ°λ° κ³Όμ μμ μλ‘μ΄κ΅¬μ‘°κ° νμνκ±°λ, μ°¨ν λ€λ₯Έ μΈμ΄μ νμ₯ννλ‘ λ€λ₯Έ ꡬ쑰λ₯Ό μ·¨ν΄μΌν κ°λ₯μ±μ΄ μκΈ°μ, λ³΄λ€ μ μ°νκ² λ°μ΄ν°λ₯Ό λΆλ¦¬ν΄μΌν νμκ° μμ΅λλ€. μ΄λ₯Ό μν΄μ JSON ννλ‘ λ°μ΄ν°λ₯Ό ννν μ μκ² νμ©νκ³ μμΌλ©°, JSON λ°μ΄ν°λ ν΄λΉ μμ€ν΄λ μμλ§ μλ€λ©΄ λ΄λΆμ μΌλ§λ μ€μ²©λ ν΄λμλμ JSONνμΌμ΄ μ‘΄μ¬νλ, μ΄λ€ μ΄λ¦μΌλ‘ ν΄λκ° μ‘΄μ¬νλ, μ΄λ€ μ΄λ¦μΌλ‘ JSON νμΌμ΄ μ‘΄μ¬νλ μ΄λ₯Ό λͺ¨λ μμ§ν΄μ ꡬμ±ν μ μκ²λ RecursiveComponent λ₯Ό ꡬμ±νμκ³ , μ΄λ₯Ό ν΅ν΄μ μμ λ‘κ² λ°μ΄ν° λͺ
μΉ λΆμ¬λ₯Ό νκ³ μμ λ‘μ΄ λ°μ΄ν° μΉ΄ν
κ³ λ¦¬ λΆμ¬κ° κ°λ₯ν©λλ€.
JSON μμ κ°μ²΄λ₯Ό νλ μμ±ν κ·Έ μμ var λΌλ μ΄λ¦μ κ°μ²΄λ₯Ό νλ λ΄μΌλ©΄, κ·Έ var κ°μ²΄ μμ λ³μλ₯Ό μμ±ν μ μμ΅λλ€. νκ΅μ΄ λ°μ΄ν°μ κ²½μ°μ μ΄λ₯Ό ν΅ν΄μ μμ΄ λ°μ΄ν°λ₯Ό ꡬμ±νλ©°, μ΄ κ³Όμ μμ ν μμ΄μ λ°μλ³ν κ³Ό λͺ¨μλ³ν λ°μ΄ν°λ₯Ό RecursiveComponent λ‘ λͺ¨λ ꡬμ±ν©λλ€. μ΄λ κ² κ΅¬μ±λ γ
μ μμ΄ λ°μ΄ν°ν μμλ λ€μκ³Ό κ°μ΅λλ€.
{
"var": {
"γ
_λ°μλ³ν": [
"γ
",
"γ
",
"γ
"
],
"γ
_λͺ¨μλ³ν": [
"γ
",
"γ
",
"γ
",
"b",
"f"
]
}
}
JSON ννλ‘ Bias λ°μ΄ν°λ₯Ό ꡬμ±ν λ λ³μλ₯Ό ꡬμ±ν μ μλλ°, μ΄ λ³μ λ΄μμ λ€λ₯Έ λ³μλ₯Ό μ¨μΌνλ μν©μ΄ μκΈΈ μ μμ΅λλ€. νκ΅μ΄λ μ£Όλ‘ μμ λ°μ΄ν° ꡬμ±μ μμ΄ λ³μλ₯Ό λΆλ¬μμΌν¨κ³Ό λμμ μμ λ λ³μμ¬μΌνλ μν©μ΄ λ°μνλλ°, μ΄λ° μν©μ μν΄μ λ³μκ° λ³μλ₯Ό μ°Έμ‘°ν μ μλλ‘ κ΅¬μ±λμ΄ μμ΅λλ€. λ³μλ RecursiveList λ₯Ό μ¬μ©ν λ μμ μμ *λ₯Ό λΆμ¬μ μ¬μ©νλ©΄ ν΄λΉ μμΉμ λ³μ λ°μ΄ν°κ° μ°Έμ‘°λ©λλ€. μμ λ°μ΄ν° κ΅¬μ± μ
{
"var": {
"μ": [
{
"type": "λ¨μ΄λ³ν©",
"data": [[
"*γ
_λͺ¨μλ³ν"
], [
""
]]
},
{
"type": "μλͺ¨ν©μ±",
"data": [
[
"γ
",
"γ
"
], [
"*γ
£_λ°μλ³ν"
]
],
"exclude": ["μ "]
}
]
}
}
ν΄λΉ νλ‘μ νΈλ λ¬Έλ§₯μ μ΄ν΄νκ³ λ¬Έλ§₯μμμ μ΄λ ν λ¨μ΄κ° λΆμ μ ν μλλ‘ μ¬μ©λμλμ§, ννμλ λ₯Ό νλ¨νμ§λ λͺ»ν©λλ€.
2016λ
λ³μ λ
(δΈη³εΉ΄)μλ μ΄λ¬ν μΌμ΄ μμμ΅λλ€.λλ μ΄λ¨Έλκ° μꡬλλκ° μλ°μ μ΄μΌ μ΄ μλ°μ μ!μμ΄, μμ , μ΄μ 3λ¨κ³λ‘ λλμ΄μ μ 리ν΄λκ° μ μλ λΆν λ JSON κΈ°λ° νμΌ λ°μ΄ν° λ³ν© 체κ³γ
/γ
λ‘ λλμ΄μ ννν μ μκ² νλ 체κ³λ₯Ό λ»ν©λλ€.)λ°/보 λΌλ λ¨μ΄μ λ³ν μλ₯Ό λͺ¨λ ꡬν λ, λ³λλ‘ μ‘΄μ¬νλ γ
/γ
μ γ
/γ
λ°μ΄ν°λ₯Ό μ°κ²°μμΌμ ꡬμ±μν¬ μ μλ 체κ³λ₯Ό λ»ν©λλ€.)FAQs
π Improved swear word detection module
The npm package tetrapod receives a total of 2 weekly downloads. As such, tetrapod popularity was classified as not popular.
We found that tetrapod demonstrated a not healthy version release cadence and project activity because the last version was released a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.

Security News
Open source is under attack because of how much value it creates. It has been the foundation of every major software innovation for the last three decades. This is not the time to walk away from it.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.